【问题标题】:VBA listbox select worksheet by indexVBA列表框按索引选择工作表
【发布时间】:2015-03-11 21:07:51
【问题描述】:

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

  1. 工作表名称
  2. 用于工作表索引

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

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

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

【问题讨论】:

  • 您可以使用名称和索引来引用工作表。您想通过获取所选项目的字符串来完成什么?即Msgbox(Worksheets(selectedItemFromList).Name)
  • 我想我可以将它添加到公式中以引用工作表(其中 xxxxxxxx 表示从列表框中选择): Cells(1, 1).FormulaR1C1 = "=VLOOKUP(R7C5," & xxxxxxx & "!R1C1:R65000C8,2,FALSE)" 我应该提到我正在将选择的工作表以变量类型传递回子:字符串。
  • 您正在使用字符串构建公式。所以,我不确定为什么这不起作用?

标签: vba excel listbox userform


【解决方案1】:

试试这个。

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

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")  

【讨论】:

  • 是的,我碰巧有一张名叫 Stan 的床单,没什么大不了的。
  • 非常感谢。我有一个非常相似的设置。现在,当我带回公共变量时,在本例中为“listchoice”。如何让 VBA 将其用作工作表?此时,用户想要查找驻留在工作表 [listchoice] 上的数据。
  • 查看修改后的答案以获取在工作表声明中使用变量来设置值的一些示例。使用Sheets("sheetName"),工作表名称的预期类型无论如何都是字符串,因此非常适合。
  • 非常感谢。现在我看到我的问题更多地与公式中的引用有关。你的工作证实了我的想法是在正确的方向。我没有将 .name 放在 myVlookup 中的变量之后。
  • 没有侮辱...非常感谢您的帮助。我有很多东西要学。
猜你喜欢
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 2018-05-06
  • 2022-01-17
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多