谷歌应用程序脚本中的vba数组
在google docs中,我看到有人编写了一个脚本,该脚本编写了一个函数,如下所示:谷歌应用程序脚本中的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'
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行,标题和数据中包含更多行,我稍后可能会添加这些行。我提供的示例是该对象的一个非常小的示例。