组合框,其中第一个是 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数据进行分析。

我愿意:

  1. 在 activesheet 上使用 combobox1 到 select sheet 从我读取数据的地方。
  2. 要使用 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