1

Я знаю, что могу показать пользовательский вид в Excel с помощью VBA. Что мне нужно сделать, это определить, какой пользовательский вид был выбран пользователем, чтобы изменить заголовок столбца на основе этого выбора.

Они используют это для создания прайс-листов для клиентов, многие из которых имеют одинаковые параметры, но у всех разные имена.

Есть ли способ определить выбранный пользовательский вид? Excel 2003

Я изменил название для этого вопроса, поскольку он более прямо спрашивает, что я пытаюсь достичь

Мне не нужно перехватывать событие выбора CustomView, мне нужно только знать, какой CustomView был выбран. Вы можете определить количество и многое другое, но не совсем то, что отображается в раскрывающемся списке элемента управления CustomView CommandBar

1 ответ1

1

Вы можете создать класс, который "зацепит" нажатие кнопки. Затем вы можете создать и уничтожить класс в событиях Активация и Деактивация рабочей книги. Там три шага:

1) Создайте модуль класса с именем «cCustomViewButton». В модуле класса вставьте этот код:

Private WithEvents cmdCustomView As Office.CommandBarButton

Private Sub Class_Initialize() '950 is the relevant control ID
Set cmdCustomView = Application.CommandBars.FindControl(ID:=950)
End Sub

Private Sub cmdCustomView_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
CancelDefault = True
msgbox "you'll have to insert your own custom view picker here"
End Sub

2) В обычном модуле объявите открытую переменную, которая является экземпляром класса, который вы создали. Вы можете вставить это в любой из ваших обычных модулей. Это должно быть наверху перед любой процедурой:

Public clsCustomViewButton As cCustomViewButton

3) Наконец, вам нужен код, который создает и уничтожает класс. Вы помещаете это в класс ThisWorkbook. Мне нравится использовать события «Активировать и деактивировать книгу»:

Private Sub Workbook_Activate()
Set clsCustomViewButton = New cCustomViewButton
End Sub

Private Sub Workbook_Deactivate()
Set clsCustomViewButton = Nothing
End Sub

Теперь просто деактивируйте, а затем активируйте рабочую книгу. Когда вы нажимаете кнопку «Вид»> «Пользовательские представления ...» (или используете сочетания клавиш, которые щелкают по ней), запускается событие щелчка.

К сожалению, вы увидите, что я заменил часть кода, в которой мы определяем текущее настраиваемое представление, и заменил его на окно сообщения о том, что вам нужно создать собственную форму выбора настраиваемого представления. Первоначально я только что открыл встроенное диалоговое окно «Настраиваемые представления», но, увы, кажется, что нет способа определить текущее настраиваемое представление, поэтому вам придется предложить им варианты, а затем продолжить, основываясь на том, какой из них они выбрали.

РЕДАКТИРОВАТЬ:

Если вы продолжаете создавать свой собственный инструмент выбора вида, вот несколько основных примеров кода:

Sub ListCustomViews()
Dim wb As Excel.Workbook
Dim cvCustomView As Excel.CustomView

Set wb = ThisWorkbook
For Each cvCustomView In ThisWorkbook.CustomViews
Debug.Print cvCustomView.Name
Next cvCustomView
End Sub

Sub RenameCustomView()
Dim NewName As String

With ThisWorkbook.CustomViews("Old Name")
    .Show
    NewName = "new Name " & .Name
    .Delete
End With
ThisWorkbook.CustomViews.Add (NewName)
End Sub

РЕДАКТИРОВАТЬ:

Я только заметил, что ваш вопрос был обновлен. Полное раскрытие: я никогда не использую пользовательские представления, поэтому не осознавал, что существует два типа элементов управления пользовательских представлений - msoControlButton в меню «Вид» и msoControlComboBox, которые вас интересуют. Просто чтобы прояснить ситуацию, любой из этих элементов управления может отображаться как на панели инструментов, например «Форматирование», так и в раскрывающемся меню, например в меню «Вид».

К счастью, комбинированный список позволяет вам делать то, что вы хотите. Я изменил свой оригинальный код clsCustomViewButton, который теперь перехватывает оба типа элементов управления. Что касается типа кнопки, он просто отсылает пользователей к типу комбинированного списка. Для типа комбинированного списка появляется сообщение с выбранным типом.

Private WithEvents cmdCustomView As Office.CommandBarButton
Private WithEvents cboCustomView As Office.CommandBarComboBox

Private Sub Class_Initialize() '950 is the relevant control ID
Set cboCustomView = Application.CommandBars.FindControl(Type:=msoControlComboBox, ID:=950)
Set cmdCustomView = Application.CommandBars.FindControl(Type:=msoControlButton, ID:=950)
End Sub

Private Sub cmdCustomView_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
CancelDefault = True
MsgBox "please use the Custom View dialog on the Formatting Commandbar"
End Sub
Private Sub cboCustomView_Change(ByVal Ctrl As Office.CommandBarComboBox)
MsgBox Ctrl.Text
End Sub

Возможно, вы захотите подтвердить, что элемент управления выпадающим типом где-то существует, и добавить его, если его нет.

Чтобы получить больше идей в этой области, прочитайте страницы 232 и далее в Professional Excel Development - книге, которая вам понравится!

Абсолютно моя последняя редакция:

Если вам действительно не нужно перехватывать событие изменения выпадающего списка и вы просто хотите иметь возможность определить текущий выбранный вид, и при условии, что где-то в меню Excel есть хотя бы один выпадающий список / выпадающий список пользовательских представлений, эта строка будет делать это одна :

приложение.CommandBars.FindControl(тип:= msoControlComboBox, Id:= 950).text

Уф!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .