作者homelife (SKY)
看板Office
标题[问题] Excel VBA建立多维阵列的问题
时间Sun Feb 24 00:48:49 2019
软体: Office 365 Excel
今天开始接触VBA,尝试了几种方式建立多维阵列,最後查到了这种方式,
可以让我一次用多行程式码建立多维阵列,程式码如下:
Dim myarray2 As Variant
myarray2 = _
Evaluate("{""AAA"",""BBB"",1,False,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""A"",""B"",1,True,False;" & _
"""d"",""e"",1,True,False}")
Debug.Print ("UBound(myarray2, 1)=" & UBound(myarray2, 1))
Debug.Print ("UBound(myarray2, 2)=" & UBound(myarray2, 2))
但是如此建立的多维阵列,里面的字串(如"A","B")只要太长,後面Debut.Print
就会出问题。
会跳出视窗显示"执行阶段错误13,型态不符合"
我猜测可能是整个Evaluate内的字串超过VBA对字串长度的限制?
但是如果用
myarray(0,1)="ABC"
这种方式一行一行设定的话,设定完我要的整个阵列大概要破百行,
实在不想要让程式码这麽冗长。
请问有什麽方式可以让我用可以换行的方式建立二维阵列,同时程式码又不会太冗长呢?
非常感谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.254.239
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1550940531.A.317.html
1F:→ soyoso: 是的evaluate内有255字数限制,以原来看字数为237,再加19 02/24 09:58
2F:→ soyoso: 个字数就会错误 02/24 09:58
3F:→ soyoso: 因此看是否将资料建立於储存格内,再以myarray2 = 范围的 02/24 10:08
4F:→ soyoso: 方式 02/24 10:08
谢谢您,看来用一个储存格来放资料的确是比较好的方式。
因为初次使用VBA,请问有办法是类似把整个巨集跟含有我事先设定好的储存格档案
包成一包,方便未来要用来处理新档案时都能直接使用,或是类似的简便方案吗?
这样未来使用巨集时就不会说因为少了一个储存格档案而无法使用,谢谢
※ 编辑: homelife (1.169.254.239), 02/24/2019 17:43:11
5F:→ soyoso: 看回文,会觉得以excel增益集方式,巨集和资料放置於该增 02/24 17:57
6F:→ soyoso: 益集档案内,并选项→增益集,excel增益集内勾选挂载 02/24 17:58
7F:→ soyoso: 这样可用於处理新档案 02/24 17:59
8F:→ soyoso: 也不排除就资料和巨集写在启用巨集活页簿或其他可存巨集的 02/24 18:43
9F:→ soyoso: 档案内,开启後再处理新档案内资料 02/24 18:43
您好,因为最後处理完成的档案不希望包含这些储存格资料,所以我优先考虑您说的
增益集方式,有成功存成增益集并且也可以在新的档案中勾选到我存的增益集,
虽然在VBA介面中的Excel物件资料夹里看得到我原本存资料用的工作表,
但巨集在执行时到了读取工作表的部分就会读不到,也许我用的程式码只能
读取当下档案中的工作表? 附上我用的程式码:
Dim JSheet As Worksheet
Set JSheet = Worksheets("工作表名称") '到了这里就会停止
当然最後手段就是用一个写好巨集的工作表来处理新档案,但还是想问问看目前增益集
的方式是否有可能成功呢? 不知道是否有语法或方式可以达成用增益集的方式?
谢谢!
※ 编辑: homelife (1.169.254.239), 02/25/2019 02:47:15
10F:→ soyoso: workbook.worksheets方式可读取已开启的活页簿 02/25 06:58
11F:→ soyoso: 内的工作表 02/25 06:58
照着您的方式,我最後试成功的语法是 ThisWorkbook,整句是这样:
Set JSheet = ThisWorkbook.Worksheets("工作表名称")
感谢你!
※ 编辑: homelife (1.169.254.239), 02/25/2019 16:18:13