VBA Excel - 使用单个变量为数组分配多个值

时间:2018-06-08 14:08:19

标签: vba excel-vba excel

对于我的问题,我已经检查了存档,并且有一个类似的线程,但我的问题略有不同,我似乎无法调整我的代码,使其工作。 类似的是:Excel 2010 VBA: How to store an array of worksheets as a variable?

我正在尝试使用变量为数组分配一系列选项卡。该变量使用另一张纸上单元格中的值。

Dim VendorTabsArray As Variant

VendorTabs= Sheets("OtherSheet").Range("A1").Value
VendorTabsArray = Array(VendorTabs)

ActiveWorkbook.Sheets(VendorTabsArray).Select

我希望用作变量的单元格A1中的实际值是" EBS - 添加用户"," EBS - 修改用户", " EBS - 删除用户"," EBS - 重新启用用户"," EBS - 密码重置"," EBS - 访问配置文件角色" ," EBS - 报告"

这给了我一个下标超出范围的错误。

当我向VendorTabArray添加一个监视时,它似乎无法识别变量中的引号和逗号,只是将整个选项卡列表添加到第一个数组位置而不是将它们拆分。

有没有人知道如何使用变量中的数组选择这些选项卡,其中变量是包含所有必需选项卡的单元格引用?

任何帮助都非常感谢,因为它令我感到困惑。

3 个答案:

答案 0 :(得分:3)

从一些有用的东西开始:

Public Sub TestMe()

    Dim someArray As Variant
    someArray = Array("EBS - Add User", "EBS - Modify User")        
    ActiveWorkbook.Sheets(someArray).Select

End Sub

然后尝试从工作表中读取并本地化问题:

enter image description here

Public Sub TestMe()

    Dim someString As String
    someString = Range("A1")

    Dim someArray As Variant
    someArray = Split(someString, ",")

    ActiveWorkbook.Sheets(someArray).Select

End Sub

问题在someArray的值中可见:

enter image description here

然后你需要一些“清洁”。因此,您创建了第二个数组,它删除了无用的"并修改了一些值:

Public Sub TestMe()

    Dim someString As String
    someString = Range("A1")

    Dim someArray As Variant
    someArray = Split(someString, ",")

    Dim someNewArray As Variant
    ReDim someNewArray(UBound(someArray))
    Dim cnt As Long

    For cnt = LBound(someNewArray) To UBound(someNewArray)
        someNewArray(cnt) = Trim(Replace(someArray(cnt), """", ""))
    Next cnt

    ActiveWorkbook.Sheets(someNewArray).Select

End Sub

现在可行:

enter image description here

答案 1 :(得分:1)

你想要的是分割功能。它将读取一个字符串并将字符串拆分为某些字符,并将每个拆分存储为数组库(0)的条目。见下文:

Dim VendorTabs, VendorTabsArray As Variant

VendorTabs = Sheets("Other Sheet").Range("A1").Value
VendorTabsArray = Split(VendorTabs, ",")
For t = LBound(VendorTabsArray) To UBound(VendorTabsArray)
    VendorTabsArray(t) = Trim(VendorTabsArray(t))
    MsgBox VendorTabsArray(t)
    ActiveWorkbook.Sheets(VendorTabsArray(t)).Select
Next

这将变量设置为等于包含每个选项卡的单元格,然后split函数会自动创建一个包含条目的数组base(0)并将其存储在您为其指定的变量中。然后我们使用For循环遍历数组的下限(0)到上限(但是你有很多选项卡减去1),我们修剪数组值(去除逗号之前和之后的额外空格) )然后消息框只显示数组值。这样就可以检查阵列是否正常工作。

您可以将消息框替换为您希望阵列执行的任何功能。我不相信你在创建数组后指定了你想要做的事情,但无论你想做什么,那就是你放置代码的地方。

更新:我看到您希望在哪里选择制表符数组的工作表。我已将其添加到代码中。

答案 2 :(得分:1)

假设我们有一个包含此格式的工作表名称的单元格:

enter image description here

此代码获取这些工作表名称的数组:

Sub ArrayOfSheetNames()
    Dim arr
    arr = Split(Replace(Range("D26").Value, Chr(34), ""), ",")
End Sub

我们删除双引号并用逗号分隔。