Excel 组合框,其中第一个是工作表列表,第二个是来自第一个组合框中所选工作表的第一列的数据

Excel 组合框,其中第一个是工作表列表,第二个是来自第一个组合框中所选工作表的第一列的数据,excel,vba,combobox,Excel,Vba,Combobox,我是VBA新手,在如何自动完成所有工作方面遇到了一些问题。我有一张用于分析的活动表和10张包含数据的表。由于分析的类型,我想使用组合框来选择数据进行分析 我想: 使用activesheet上的combobox1选择从中读取数据的工作表 要使用combobox2,其中是combobox1中所选工作表第一列中的名称列表 示例:表2-10为国家名称,第1列为这些国家的城市,数据与每个城市相关。因此,在combobox1中,我选择UK=sheet(4),然后在Combox2中选择London=cell

我是VBA新手,在如何自动完成所有工作方面遇到了一些问题。我有一张用于分析的活动表和10张包含数据的表。由于分析的类型,我想使用组合框来选择数据进行分析

我想:

  • 使用activesheet上的combobox1选择从中读取数据的工作表
  • 要使用combobox2,其中是combobox1中所选工作表第一列中的名称列表
  • 示例:表2-10为国家名称,第1列为这些国家的城市,数据与每个城市相关。因此,在combobox1中,我选择UK=sheet(4),然后在Combox2中选择London=cell A40。然后我计算B40 x C40/F40

    我开始喜欢:

    Public子工作表\u Activate()
    作为整数的Dim x
    totalcountries=Sheets.Count
    对于x=2到2的国家/地区
    Me.Combobox1.AddItem表(x).名称
    下一个x
    端接头
    
    以及:

    Sub-selectcity()
    表(1).组合框2.List=表(4).范围(“A2:A56”).值
    端接头
    

    我不知道如何连接它。谢谢。

    我们可以使用与组合框相关的“事件”

    我在这里使用的方法是:

    (1)单击ComboBox1时,它将填充除ActiveSheet之外的所有工作表的名称。现在,您可以从下拉列表中选择所需的工作表

    (2)当您从ComboBox1中选择TAB键时(通过按TAB键),它将使用您在ComboBox1中选择的工作表中的城市名称填充ComboBox2

    我将活动表命名为“acSht”,只是为了在这里进行解释。你可以用你的名字。如果使用其他名称,请将“acSht”替换为您提供给ActiveSheet的名称

    转到“开发人员”并单击“控制”部分下的“设计模式”

    现在双击ComboBox1。这将带您进入Visual Basic编辑器窗口。在出现的白色窗格中,您可以在顶部看到两个下拉框。从右上角的下拉框中选择“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
    
    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
    
    接下来从右上角的下拉框中选择“KeyDown”,并使用以下代码

    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
    
    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
    

    如果只想使用鼠标而不想使用tab,您将如何操作?请使用ComboBox1_LostFocus()事件。