我是VBA的新手,对于如何自动完成每件事我都有一些问题。我有一个有效的分析表和10个表格的数据。由于分析的类型,我想使用组合框来选择数据进行分析。
我想:
中选择的工作表的第一列的名称列表。
例如:第2-10页是国家名称,第1栏是与每个城市相关数据的国家中的城市。所以在combobox1中,我选择UK =sheet(4),然后在combobox2 London= cell A40中选择。然后计算B40 x C40 /F40..。
我开始说:
Public Sub Worksheet_Activate()
Dim x As Integer
totalcountries = Sheets.Count
For x = 2 To totalcountries
Me.Combobox1.AddItem Sheets(x).Name
Next x
End Sub和:
Sub selectcity()
Sheets(1).combobox2.List = Sheets(4).Range("A2:A56").Value
End Sub我不知道怎么连接它。谢谢。
发布于 2021-05-20 13:07:48
我们可以使用与组合框相关的“事件”。
我在这里使用的方法是:
(1 )单击ComboBox1时,它将填充除ActiveSheet之外的所有工作表的名称。您现在可以从下拉列表中选择您想要的工作表。
(2 )当您离开ComboBox1 (通过按TAB)时,它在ComboBox2中填充了您在ComboBox1中选择的工作表中的城市名称。
我把ActiveSheet命名为"acSht“只是为了在这里解释。你可以用你的名字。如果使用不同的名称,请将"acSht“替换为提供给ActiveSheet的名称。
转到Developer并单击“控件”部分下的“设计模式”。
现在双击ComboBox1.这将带您到窗口。在出现的白色窗格中,可以看到顶部有两个下拉框。从右上角的下拉框中选择“GotFocus”。
使用以下代码。
Private Sub ComboBox1_GotFocus()
Worksheets("acSht").ComboBox1.Clear
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = "acSht" Then ThisWorkbook.Worksheets("acSht").ComboBox1.AddItem ws.Name
Next ws
End Sub接下来,从右上角的下拉框中选择“KeyDown”,然后使用以下代码。
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Worksheets("acSht").ComboBox2.Activate
If KeyCode = vbKeyTab Then
Worksheets("acSht").ComboBox2.Clear
Dim ws As Worksheet, rng As Range, wsName As String
If Not ThisWorkbook.Worksheets("acSht").ComboBox1.Value = Empty Then
wsName = ThisWorkbook.Worksheets("acSht").ComboBox1.Value
Set ws = ThisWorkbook.Worksheets(wsName)
Else
Exit Sub
End If
For Each rng In ws.Range("A2", ws.Range("A" & Rows.Count).End(xlUp))
ThisWorkbook.Worksheets("acSht").ComboBox2.AddItem rng.Value
Next rng
End If
End Subhttps://stackoverflow.com/questions/67620431
复制相似问题