首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >组合框,其中第一个是工作表的列表,第二个是来自第一个组合框中选定的工作表的第一列的数据。

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

Stack Overflow用户
提问于 2021-05-20 12:32:37
回答 1查看 63关注 0票数 0

我是VBA的新手,对于如何自动完成每件事我都有一些问题。我有一个有效的分析表和10个表格的数据。由于分析的类型,我想使用组合框来选择数据进行分析。

我想:

  1. 使用combobox1 on活动单从我读取数据的地方选择工作表,
  2. 使用combobox2 where是从combobox1.

中选择的工作表的第一列的名称列表。

例如:第2-10页是国家名称,第1栏是与每个城市相关数据的国家中的城市。所以在combobox1中,我选择UK =sheet(4),然后在combobox2 London= cell A40中选择。然后计算B40 x C40 /F40..。

我开始说:

代码语言:javascript
运行
复制
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

和:

代码语言:javascript
运行
复制
Sub selectcity()
    Sheets(1).combobox2.List = Sheets(4).Range("A2:A56").Value 
End Sub

我不知道怎么连接它。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 13:07:48

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

我在这里使用的方法是:

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

(2 )当您离开ComboBox1 (通过按TAB)时,它在ComboBox2中填充了您在ComboBox1中选择的工作表中的城市名称。

我把ActiveSheet命名为"acSht“只是为了在这里解释。你可以用你的名字。如果使用不同的名称,请将"acSht“替换为提供给ActiveSheet的名称。

转到Developer并单击“控件”部分下的“设计模式”。

现在双击ComboBox1.这将带您到窗口。在出现的白色窗格中,可以看到顶部有两个下拉框。从右上角的下拉框中选择“GotFocus”。

使用以下代码。

代码语言:javascript
运行
复制
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”,然后使用以下代码。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67620431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档