VBA列表框按索引选择工作表

时间:2015-01-13 19:36:12

标签: excel vba excel-vba listbox userform

我有一个带有列表框的表单,它可以动态提供当前工作簿中的工作表列表(下面的代码)。我希望获取所选的工作表,并在后面的过程中在公式中引用它。从几个小时的游戏开始,我似乎无法实现这一目标。我相信我在某个地方读到你不能把字符串带回子并用它来引用一个对象。所以我想也许我可以创建两个列表框

  1. 表格名称
  2. 表格索引
  3. 我可以传递索引号,也许可以在我的公式中使用它来查找正确表单中的项目。

    对于我的生活,我似乎无法找到连接这两者的方法,因为物品将永远在变化;代码将由多个操作员在多个工作簿上运行,因此布局很可能在用户之间发生变化。我可以轻松地添加第二个列表框索引#'但我有一个块,关于如何将对用户有意义的名称和我可以传递回sub的索引相关联。我意识到"点击"列表框关联这两个但是与字段的动态性质相关的程序我无法想出将其放入代码的逻辑。

    For N = 1 To ActiveWorkbook.Sheets.Count
        With ListBox1
            .AddItem ActiveWorkbook.Sheets(N).Name
        End With
    Next N
    

1 个答案:

答案 0 :(得分:3)

试一试。

在UserForm的代码上方声明一个公共变量,使其可以从任何模块或代码在整个工作簿中使用。

Public listChoice As String

使用您的代码获取ListBox行源的工作表名称。

Private Sub UserForm_Activate()

    For n = 1 To ActiveWorkbook.Sheets.count
        With ListBox1
            .AddItem ActiveWorkbook.Sheets(n).name
        End With
    Next n

End Sub

包含ListBox的更新事件

Private Sub ListBox1_AfterUpdate()

    listChoice = ListBox1.Text

End Sub

我加入了一项测试,以证明结果仍然保留。您不需要此功能,它会在屏幕截图中显示结果。

Private Sub cmdTestChoice_Click()

    MsgBox ("The choice made on the ListBox was: " & listChoice)

End Sub

编辑:要稍后访问该表格,您可以使用以下内容进行调用:

使用.Range或.Cells,使用数字或字母访问单元格的不同方法的一些示例。

使用lRow& lCol as Long设置行号和列号。

Sheets(listChoice).Cells(lRow, lCol).Value = TextBox1.Value  'Set cell on sheet from TextBox
TextBox2.Value = Sheets(listChoice).Range("A2").Value        'Set TextBox From Cell on Sheet
'Set a cell on another sheet using the selected sheet as a source.
Sheets("AnotherSheet").Cells(lRow, "D") = Sheets(listChoice).Range("D2")  

Screenshot