VBA列表框按索引select工作表

我有一个带有列表框的表单,它dynamic地提供当前工作簿(下面的代码)中的工作表列表。 我希望在选定的工作表中参考,并在稍后的公式中参考它。 从几个小时的玩耍,我似乎无法完成这一点。 我相信我读过的地方,你不能把string回到子,并使用它来引用一个对象。 所以我想也许我可以创build两个列表框

  1. 为表名称
  2. 为图表索引

我可以通过索引号,并可能在我的公式中使用它来查找正确的工作表中的项目。

对于我的生活,我似乎无法find一种连接两者的方式,因为这些项目总是在变化。 该代码将由多个运营商在多个工作簿上运行,因此布局很可能会在用户之间发生变化。 我可以很容易地添加索引#的第二个列表框,但我有一个关于如何将名称,将有意义的用户和我可以传回给子索引块。 我意识到列表框中的“点击”过程将两者联系起来,但是与字段的dynamic特性相关,我不能拿出把它放到代码中的逻辑。

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

试试这个。

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

 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 

我包括一个testing只是为了certificate结果仍然保留。 你不需要这个,它会在屏幕截图上显示结果。

 Private Sub cmdTestChoice_Click() MsgBox ("The choice made on the ListBox was: " & listChoice) End Sub 

编辑:稍后要访问该表,你可以使用这样的东西来调用它:

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

使用lRow&lCol 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") 

截图