我想创建一个 ActiveX 命令按钮,该按钮将根据来自单独隐藏工作表(尽管仍在同一个工作簿中)的数据填充工作表上的单元格。 但是,我希望按钮知道根据在列表框中选择的选择来提取特定数据。
例如:假设有人在"工作表 1"中工作,其中有 2 个 ActiveX 列表框和 1 个 ActiveX 命令按钮。 如果此人在第一个列表框中选择"动物",则第二个列表框将显示以下动物列表。 然后,假设该人在第二个列表框中选择了"狗"。 然后,我希望 ActiveX 命令按钮能够识别出有人在前两个列表框中同时选择了"动物"和"狗",然后在单击时,能够从单独的隐藏工作表("工作表 2")中提取数据以显示在"工作表 1"上。 因此,换句话说,选择"狗"的数据将对个人隐藏,但是当他们在第二个列表框中选择"狗",然后单击ActiveX命令按钮时,数据将出现。
我已经知道如何在 VBA 中为依赖列表框编写代码,但我不确定如何使 ActiveX 命令按钮依赖于列表框中的选择。 这是否可能,如果是这样,任何人都可以为我提供可用于满足我的规范的 VBA 代码吗? 此外,有谁知道ActiveX命令按钮的VBA代码,该按钮将从一张纸中提取数据,并将其显示在另一张纸上? 任何意见都值得赞赏。 谢谢!
很难具体说明所提供的信息,但希望这可以为您指明正确的方向。 这假定您的第二个列表框中只有一列:
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 处于关闭状态(单个)。
玩得愉快!
好吧,我相信我实际上找到了一种方法,通过创建此模块让命令按钮从一张纸中提取数据并将其放在另一张纸上:
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
但是,我仍然不知道如何将命令按钮链接到列表框,以便它知道已做出特定选择。 因此,如果有人在第一个框中选择了"动物",在第二个框中选择了"狗",我需要命令按钮来识别这两个选择,以便从隐藏的工作表中提取正确的数据。
好的,尝试这样的事情(顺便问一下,这些是列表框还是组合框? 对你的命名感到困惑,它们是否是列表框......如果组合,请将"作为列表框"更改为"作为组合框"):
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 个字符串值查找数据...有意义?