Командная кнопка ActiveX в сочетании со списками ActiveX - необходим код VBA

Я хотел бы создать командную кнопку ActiveX, которая будет заполнять ячейки на одном листе на основе данных с отдельного скрытого листа (хотя все еще в той же книге). Однако я хочу, чтобы кнопка знала, что нужно извлекать определенные данные в зависимости от выбора, который был выбран в списках.

Например: скажем, кто-то работает в "Рабочем листе 1", где расположены 2 списка ActiveX и 1 кнопка ActiveX Command. Если этот человек выберет "Животное" в первом списке, то во втором окне отобразится следующий список животных. Тогда, скажем, этот человек выбирает "собаку" во втором списке. Затем я хочу, чтобы командная кнопка ActiveX распознала, что кто-то выбрал и "животное", и "собаку" в двух предыдущих списках, а затем при нажатии можно извлечь данные из отдельного скрытого листа ("Рабочий лист 2") для отображения на "Рабочем листе 1." Таким образом, другими словами, данные для выбора "собака" будут скрыты от человека, но когда они выбирают "собака" во втором списке, а затем нажмите кнопку команды ActiveX, затем данные появятся.

Я уже знаю, как написать код в VBA для зависимых списков, но я не уверен, как сделать командную кнопку ActiveX зависимой от выбора в списке. Возможно ли это, и если да, может ли кто-нибудь предоставить мне код VBA, который я могу использовать для выполнения своих требований? Кроме того, кто-нибудь знает код VBA для командной кнопки ActiveX, который будет извлекать данные с одного листа и отображать их на другом? Любой вклад приветствуется. Спасибо!

3 ответа

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

Sub PopulateMain(ByVal lRowNumber As Long)

Dim shReport As Worksheet
Dim shData As Worksheet

' Assign sheets to the variable.
Set shReport = ThisWorkbook.Worksheets("Report")
Set shData = ThisWorkbook.Worksheets("Data")

' Paste the value in sheet Data Range H2 into sheet Report Range C12.
shReport.Range("C14").Value = shData.Range("H2").Value
shReport.Range("C16").Value = shData.Range("I2").Value
shReport.Range("C18").Value = shData.Range("J2").Value
shReport.Range("C20").Value = shData.Range("K2").Value
shReport.Range("K14").Value = shData.Range("L2").Value
shReport.Range("K16").Value = shData.Range("M2").Value
shReport.Range("K18").Value = shData.Range("N2").Value

End Sub

А затем с помощью этого кода:

Private Sub CommandButton1_Click()

Call PopulateMain(2)

End Sub

Тем не менее, я до сих пор не знаю, как связать командную кнопку со списком, чтобы он знал, что был сделан конкретный выбор. Итак, еще раз, если кто-то выбрал "Животные" в первом поле и "Собака" во втором поле, мне нужна командная кнопка, чтобы распознать эти два варианта, чтобы извлечь правильные данные из скрытого листа.

Хорошо, попробуйте что-то вроде этого (кстати, эти списки или поля со списком? Смущены вашими именами, если они являются списками или нет... если это комбо, измените As ListBox на As ComboBox):

Sub cmdActiveX_Click()
    Dim lboCategory as ListBox
    Dim lboDependent as ListBox
    Dim strBox1 as String

    Set lboCategory = Worksheets("Report").cboCategoryList
    strCategory = lboCategory.List(lboCategory.ListIndex) 

    Set lboDependent = Worksheets("Report").cboDependentList
    strCategory = lboCategory.List(lboCategory.ListIndex) 

End Sub

Затем используйте 2 строковых значения, чтобы найти ваши данные... имеет смысл?

Трудно быть конкретным с предоставленной информацией, но, надеюсь, это может указать вам правильное направление. Это предполагает, что у вас есть только один столбец в вашем втором ListBox:

Sub cmdActiveX_Click()
    Dim strBox1 as String
    Dim strBox2 as String

    strBox1 = Worksheets("SheetWithListBoxes").ListBox1.List(Worksheets("SheetWithListBoxes").ListBox1.ListIndex))
End Sub

Более чистый способ может быть:

Sub cmdActiveX_Click()
    Dim lbo as ListBox
    Dim strBox1 as String

    Set lbo = Worksheets("SheetWithListBoxes").ListBox1
    strBox1 = lbo.List(lbo.ListIndex) 
End Sub

Итак, вы получаете индекс выбранного элемента из ListIndex, а затем передаете его в метод List. Это также предполагает, что MulitSelect выключен (один).

Повеселись!

Другие вопросы по тегам