Как я могу получить имя текущего списка в VBA? - PullRequest
0 голосов
/ 10 июля 2019

в соответствии с Как обращаться к сгенерированным спискам и динамически добавлять элементы в VBA? Я сгенерировал несколько списков, которые я назначил для OnAction Sub.Событие OnAction должно показать мне количество выбранных элементов текущего ListBox.

. Для лучшего понимания:

например, я сгенерировал 5 списков (ListBox1, ListBox2, ...) на моем рабочем листе "FS".

Когда я нажимаю 1 элемент в ListBox1, MsgBox отображается с "1".

Если я щелкну по дополнительному элементу в ListBox1, MsgBox отобразит «2».

Но если я щелкну по другому элементу ListBox3, MsgBox должен показать «1».

    'ListBoxName as a variable for current ListBox and probably the most problematic line
    ListBoxName = ActiveControl.Name

    selectedItems = 0

    Set lb = FS.ListBoxes(ListBoxName)

    'The following counts the selected items in target ListBox
    For i = 1 To lb.ListCount Step 1
        If lb.Selected(i) Then
            selectedItems = selectedItems + 1
        End If
    Next i

    'This part puts up the Message Box with the number of selected items in target ListBox
    If selectedItems > 0 Then
        MsgBox selectedItems
    End If

Дополнительная информация: я пропустил объявления переменных для лучшего обзора.Я не использую ActiveX, и я не использую пользовательскую форму.Получение текущего имени Listbox поможет мне в дальнейшем программировании и задачах, которые я хочу выполнить.На мой взгляд, было так легко найти имя ListBox, в котором я сделал свой последний клик ...

Заранее спасибо!

РЕДАКТИРОВАТЬ :Код размещается в модуле «Module1» в Sub Module1.В другом модуле «генерация», где я генерирую списки, модуль Module1 запускается с lb.OnAction = "Module1.Module1".

EDIT2 , изменяющим «OnClick» на «OnAction»

1 Ответ

2 голосов
/ 10 июля 2019

Вы не можете использовать ActiveControl для списков форм.Чтобы получить имя списка формы, вызвавшего событие ONCLICK, используйте свойство Application.Caller (Excel)

. В событии ONCLICK списка форм введите это.

Sub ONCLICK()
    Dim shp As Shape
    Set shp = Shapes(Application.Caller)

    '~~> This will give you the value of what is selected in that listbox
    MsgBox shp.ControlFormat.List(shp.ControlFormat.Value)
End Sub

Примечание : Если вышеуказанный код не находится в соответствующей области кода листа, вам придется изменить значение Shapes(Application.Caller) до Activesheet.Shapes(Application.Caller), как упомянул Ясир ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...