Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA列表框按索引选择工作表_Vba_Excel_Listbox_Userform - Fatal编程技术网

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

VBA列表框按索引选择工作表,vba,excel,listbox,userform,Vba,Excel,Listbox,Userform,我有一个带有列表框的表单,它动态地提供下面当前工作簿代码中的工作表列表。我希望选取所选表格,并在稍后的流程中在公式中引用它。从几个小时的玩耍中,我似乎无法做到这一点。我相信我在某个地方读到,你不能把字符串带回到sub,并用它来引用一个对象。所以我想也许我可以创建两个列表框 对于图纸名称 表索引 我可以将索引号传递给,并在公式中使用它从正确的工作表中查找项目 在我的一生中,我似乎找不到一种方法将两者联系起来,因为事物总是在变化;代码将由多个操作员在多个工作簿上运行,因此布局很可能在用户之间发生变化

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

对于图纸名称 表索引 我可以将索引号传递给,并在公式中使用它从正确的工作表中查找项目

在我的一生中,我似乎找不到一种方法将两者联系起来,因为事物总是在变化;代码将由多个操作员在多个工作簿上运行,因此布局很可能在用户之间发生变化。我可以很容易地将第二个列表框添加到索引中,但我有一个块,关于如何将对用户有意义的名称与我可以传递回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。不受侮辱……非常感谢您的帮助。我有很多东西要学。