谷歌应用程序脚本中的vba数组

时间:2017-05-11 19:27:51

标签: excel vba excel-vba google-apps-script

在google docs中,我看到有人编写了一个脚本,编写了一个类似于:

的函数
function createChargeList () {
    return [['No.', 'Name', 'Cooldown', 'Power', 'Energy Loss', 'Type', 'Damage Window Start'], 
          [1.0, 'AerialAce', 240.0, 55.0, 33.0, 3.0, 190.0], [2.0, 'AirCutter', 270.0, 60.0, 50.0, 3.0, 180.0], [3.0, 'AncientPower', 350.0, 70.0, 33.0, 6.0, 285.0], [4.0, 'AquaJet', 260.0, 45.0, 33.0, 11.0, 170.0], [5.0, 'AquaTail', 190.0, 50.0, 33.0, 11.0, 120.0]
}

我正在尝试使用VBA自学编码,而且我无法理解上述代码之类的内容将如何转换为Excel的vba脚本。

2 个答案:

答案 0 :(得分:2)

VBA没有你在javascript中找到的相同类型的数组文字构造

如果您想要单行分配,这就是您所拥有的:

Dim a

a = Array("a", "b", "c") '>>0-based 1-d array

a = ["a", "b"] '>> *1*-based 1-d array

a = [{"a", "b";"c","d"}] '>> *1*-based 2-d array

请注意,最后一个与您的示例不同(即不是数组数组)

答案 1 :(得分:2)

Google Apps脚本基于javascript。 VBA基于Visual Basic。硬编码是一种可能性,但你最终会得到一些时髦阵列,而你只限于VBA的笨重阵列方法(或缺乏阵列方法)。

Function createChargeList()
    Dim var(5)
    var(0) = [{"No.", "Name", "Cooldown", "Power", "Energy Loss", "Type", "Damage Window Start"}]
    var(1) = [{1.0, "AerialAce", 240.0, 55.0, 33.0, 3.0, 190.0}]
    var(2) = [{2.0, "AirCutter", 270.0, 60.0, 50.0, 3.0, 180.0}]
    var(3) = [{3.0, "AncientPower", 350.0, 70.0, 33.0, 6.0, 285.0}]
    var(4) = [{4.0, "AquaJet", 260.0, 45.0, 33.0, 11.0, 170.0}]
    var(5) = [{5.0, "AquaTail", 190.0, 50.0, 33.0, 11.0, 120.0}]
    createChargeList = var

End Function

或者你可以"硬编码"它是DictionaryCollectionArrayListArrayList s)。使用Dict或ArrayList会有一些好处,因为它们可以使用其他方法。字典示例,这不是我如何构建它,但它显示了如何做到这一点:

Function createChargeDict()
    Dim d As Object
    Set d = CreateObject("Scripting.Dictionary")
    d("No.") = Array(1#, 2#, 3#, 4#, 5#)
    d("Name") = Split("AerialAce,AirCutter,AncientPower,AquaJet,AquaTail", ",")
    'etc...
    Set createChargeDict = d
End Function

但是,它很难被硬编码"如果它不仅仅是一个非常少量的数据,例如每个Tim的答案(或者同样通过我上面所做的事情),当然如果有任何更改你需要去编辑代码。

另一种选择是将数据保存为CSV或其他分隔文件,并在运行时将其读入array / dict / list / collection。

我会做什么(意见)

另一种更常见的方法 - 正如您在评论中所询问的那样 - 只需在工作表上创建一个表格(可选:隐藏工作表,以便用户不会搞砸它),指定一个Name来表示表格的范围,然后您可以参考范围的.Value属性,该属性将返回一个数组。

这样做的另一个好处是,您可以对单元格范围使用所有Worksheet方法和函数(或作为工作表上的表/ ListObject),然后您可以执行此操作在过滤,切片,查找元素,匹配/索引等方面更多,它也更容易更新。