Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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_Google Apps Script - Fatal编程技术网

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

谷歌应用程序脚本中的vba数组,vba,excel,google-apps-script,Vba,Excel,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'

在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脚本的。

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

请注意,最后一个与您的示例ie不同。Google Apps脚本不是基于javascript的数组。VBA是基于visualbasic的。硬编码是一种可能,但最终会得到一些时髦的数组,然后只能使用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
或者您可以将其硬编码到字典、集合或ArrayList的ArrayList。使用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或其他分隔文件,并在运行时将其读入数组/dict/list/collection

我会怎么做 另一种更常见的方法——正如您在评论中所询问的那样——是在工作表上创建一个表(可选):隐藏工作表,这样用户就不会弄乱它,指定一个名称来表示表的范围,然后您可以只引用范围的.Value属性,该属性将返回一个数组


这样做的附加好处是,您可以针对单元格范围使用所有工作表方法和函数,或者作为工作表上的表/列表对象使用,然后您可以在筛选、切片、查找元素、匹配/索引等方面使用它做更多的工作。,而且它也更容易更新。

这看起来像文本/平面文件中的行,可能比VBA中的数组更好地组织在不同的结构中。@DavidZemens您是否建议创建一个包含所有这些元素的表,然后将表本身作为变量调用?我不确定这是否有效,但我认为这是一个可能的解决办法。共有12列,总计约251行,标题和数据中包含更多行,我稍后可能会添加这些行。我提供的示例是该对象的一个非常小的示例。