VBA 列表框 select 工作表索引

VBA listbox select worksheet by index

我有一个带有列表框的表单,它动态地提供当前工作簿中的作品列表sheet(下面的代码)。我希望采用选定的 Sheet 并在稍后的过程中在公式中引用它。从几个小时的玩耍来看,我似乎无法做到这一点。我相信我在某处读到你不能将字符串带回 sub 并使用它来引用对象。所以我想也许我可以创建两个列表框

  1. 对于 sheet 姓名
  2. 对于 sheet 索引

我可以将索引号传递给并可能在我的公式中使用它来从正确的 sheet 中查找项目。

在我的一生中,我似乎找不到将两者联系起来的方法,因为项目总是在变化;代码将由多个操作员在多个工作簿上 运行,因此布局很可能会在用户之间发生变化。我可以很容易地添加带有索引#'s 的第二个列表框,但是我有一个关于如何关联对用户有意义的名称和我可以传回子的索引的块。我意识到列表框的 "On click" 程序将两者相关联,但由于字段的动态特性,我无法想出将其放入代码的逻辑。

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

试试这个。

在用户窗体的代码上方声明一个 public 变量,使其在整个工作簿中的任何模块或代码中都可用。

Public listChoice As String

使用您的代码获取列表框行源的 sheet 名称。

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

编辑: 要稍后访问 sheet,您可以使用如下方式调用它:

访问单元格的不同方式的一些示例,使用带有数字或字母的 .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")