组合框,其中第一个是 sheet 的列表,第二个是来自第一个组合框中所选 sheet 的第一列的数据
Comboboxes where in first one is list of the sheets and in second one is data from first column from selected sheet in first combobox
我是 VBA 的新手,我在如何自动执行所有操作方面遇到了一些问题。我有一个活跃的 sheet 用于分析,还有 10 个 sheet 用于数据。由于分析的类型,我想使用组合框对select数据进行分析。
我愿意:
- 在 activesheet 上使用 combobox1 到 select sheet 从我读取数据的地方。
- 要使用 combobox2,其中 sheet select 编辑在 combobox1 中的第一列的名称列表。
示例:工作表2-10是国家名称,第1列是这些国家的城市,每个城市都有相关数据。因此,在 combobox1 I select UK =sheet(4) 中,然后在 combobox2 London= 单元格 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
不知道怎么连接。谢谢。
我们可以使用与组合框相关的 'events'。
我这里使用的方法是:
(1 )当您单击 ComboBox1 时,它会填充除 ActiveSheet 之外的所有 sheet 的名称。您现在可以从下拉列表中选择您想要的 sheet。
(2 )当您从 ComboBox1 使用 TAB 键(通过按 TAB 键)时,它会使用您在 ComboBox1 中选择的 sheet 中的城市名称填充 ComboBox2。
我将 ActiveSheet 命名为“acSht”只是为了在这里进行解释。你可以用你的名字。如果您使用不同的名称,请将“acSht”替换为您提供给 ActiveSheet 的名称。
转到开发人员并单击 'Controls' 部分下的 'Design Mode'。
现在双击 ComboBox1。这会将您带到 Visual Basic 编辑器 window。在出现的白色窗格中,您可以在顶部看到两个下拉框。从右上角的下拉框中选择 '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 Sub
我是 VBA 的新手,我在如何自动执行所有操作方面遇到了一些问题。我有一个活跃的 sheet 用于分析,还有 10 个 sheet 用于数据。由于分析的类型,我想使用组合框对select数据进行分析。
我愿意:
- 在 activesheet 上使用 combobox1 到 select sheet 从我读取数据的地方。
- 要使用 combobox2,其中 sheet select 编辑在 combobox1 中的第一列的名称列表。
示例:工作表2-10是国家名称,第1列是这些国家的城市,每个城市都有相关数据。因此,在 combobox1 I select UK =sheet(4) 中,然后在 combobox2 London= 单元格 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
不知道怎么连接。谢谢。
我们可以使用与组合框相关的 'events'。
我这里使用的方法是:
(1 )当您单击 ComboBox1 时,它会填充除 ActiveSheet 之外的所有 sheet 的名称。您现在可以从下拉列表中选择您想要的 sheet。
(2 )当您从 ComboBox1 使用 TAB 键(通过按 TAB 键)时,它会使用您在 ComboBox1 中选择的 sheet 中的城市名称填充 ComboBox2。
我将 ActiveSheet 命名为“acSht”只是为了在这里进行解释。你可以用你的名字。如果您使用不同的名称,请将“acSht”替换为您提供给 ActiveSheet 的名称。
转到开发人员并单击 'Controls' 部分下的 'Design Mode'。
现在双击 ComboBox1。这会将您带到 Visual Basic 编辑器 window。在出现的白色窗格中,您可以在顶部看到两个下拉框。从右上角的下拉框中选择 '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 Sub