VBA列表框按索引选择工作表
我有一个带有列表框的表单,它动态地提供下面当前工作簿代码中的工作表列表。我希望选取所选表格,并在稍后的流程中在公式中引用它。从几个小时的玩耍中,我似乎无法做到这一点。我相信我在某个地方读到,你不能把字符串带回到sub,并用它来引用一个对象。所以我想也许我可以创建两个列表框 对于图纸名称 表索引 我可以将索引号传递给,并在公式中使用它从正确的工作表中查找项目 在我的一生中,我似乎找不到一种方法将两者联系起来,因为事物总是在变化;代码将由多个操作员在多个工作簿上运行,因此布局很可能在用户之间发生变化。我可以很容易地将第二个列表框添加到索引中,但我有一个块,关于如何将对用户有意义的名称与我可以传递回sub的索引相关联。我实现了列表框将两者关联的点击过程,但对于字段的动态性质,我无法想出将其放入其中的逻辑代码VBA列表框按索引选择工作表,vba,excel,listbox,userform,Vba,Excel,Listbox,Userform,我有一个带有列表框的表单,它动态地提供下面当前工作簿代码中的工作表列表。我希望选取所选表格,并在稍后的流程中在公式中引用它。从几个小时的玩耍中,我似乎无法做到这一点。我相信我在某个地方读到,你不能把字符串带回到sub,并用它来引用一个对象。所以我想也许我可以创建两个列表框 对于图纸名称 表索引 我可以将索引号传递给,并在公式中使用它从正确的工作表中查找项目 在我的一生中,我似乎找不到一种方法将两者联系起来,因为事物总是在变化;代码将由多个操作员在多个工作簿上运行,因此布局很可能在用户之间发生变化
For N = 1 To ActiveWorkbook.Sheets.Count
With ListBox1
.AddItem ActiveWorkbook.Sheets(N).Name
End With
Next N
试试这个
在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
包括列表框的更新事件
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设置行数和列数
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")
您可以使用名称和索引来引用工作表。通过获取所选项目的字符串,您希望完成什么?i、 e.MsgboxWorksheetsselectedItemFromList.Name我想我可以将它添加到一个公式中,以引用其中xxxxxxxx表示列表框中的选择的工作表:Cells1,1.FormulaR1C1==VLOOKUPR7C5,&xxxxxxx&!R1C1:R65000C8,2,FALSE我应该提到我正在以变量类型:string将所选工作表传递回sub。您正在使用string构建公式。所以,我不知道为什么这不起作用?是的,我碰巧有一张纸叫斯坦,没什么大不了的。非常感谢。我有一个非常相似的设置。现在,当我返回公共变量时,在本例中是listchoice。如何让VBA将其用作工作表?此时,用户希望查找驻留在工作表[listchoice]上的数据。有关在工作表声明中使用变量设置值的示例,请参阅修订后的答案。使用SheetssheetName,工作表名称的预期类型无论如何都是字符串,因此它非常适合。非常感谢。现在我发现我的问题更多地与公式中的引用有关。你的工作证实了我的想法是正确的。我没有在myVlookup中的变量后面加上.name。不受侮辱……非常感谢您的帮助。我有很多东西要学。