作者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/m.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