[問題] Excel VBA建立多維陣列的問題

看板Office作者 (SKY)時間7年前 (2019/02/24 00:48), 7年前編輯推噓0(0011)
留言11則, 1人參與, 7年前最新討論串1/1
軟體: 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://www.ptt.cc/bbs/Office/M.1550940531.A.317.html

02/24 09:58, 7年前 , 1F
是的evaluate內有255字數限制,以原來看字數為237,再加19
02/24 09:58, 1F

02/24 09:58, 7年前 , 2F
個字數就會錯誤
02/24 09:58, 2F

02/24 10:08, 7年前 , 3F
因此看是否將資料建立於儲存格內,再以myarray2 = 範圍的
02/24 10:08, 3F

02/24 10:08, 7年前 , 4F
方式
02/24 10:08, 4F
謝謝您,看來用一個儲存格來放資料的確是比較好的方式。 因為初次使用VBA,請問有辦法是類似把整個巨集跟含有我事先設定好的儲存格檔案 包成一包,方便未來要用來處理新檔案時都能直接使用,或是類似的簡便方案嗎? 這樣未來使用巨集時就不會說因為少了一個儲存格檔案而無法使用,謝謝 ※ 編輯: homelife (1.169.254.239), 02/24/2019 17:43:11

02/24 17:57, 7年前 , 5F
看回文,會覺得以excel增益集方式,巨集和資料放置於該增
02/24 17:57, 5F

02/24 17:58, 7年前 , 6F
益集檔案內,並選項→增益集,excel增益集內勾選掛載
02/24 17:58, 6F

02/24 17:59, 7年前 , 7F
這樣可用於處理新檔案
02/24 17:59, 7F

02/24 18:43, 7年前 , 8F
也不排除就資料和巨集寫在啟用巨集活頁簿或其他可存巨集的
02/24 18:43, 8F

02/24 18:43, 7年前 , 9F
檔案內,開啟後再處理新檔案內資料
02/24 18:43, 9F
您好,因為最後處理完成的檔案不希望包含這些儲存格資料,所以我優先考慮您說的 增益集方式,有成功存成增益集並且也可以在新的檔案中勾選到我存的增益集, 雖然在VBA介面中的Excel物件資料夾裡看得到我原本存資料用的工作表, 但巨集在執行時到了讀取工作表的部分就會讀不到,也許我用的程式碼只能 讀取當下檔案中的工作表? 附上我用的程式碼: Dim JSheet As Worksheet Set JSheet = Worksheets("工作表名稱") '到了這裡就會停止 當然最後手段就是用一個寫好巨集的工作表來處理新檔案,但還是想問問看目前增益集 的方式是否有可能成功呢? 不知道是否有語法或方式可以達成用增益集的方式? 謝謝! ※ 編輯: homelife (1.169.254.239), 02/25/2019 02:47:15

02/25 06:58, 7年前 , 10F
workbook.worksheets方式可讀取已開啟的活頁簿
02/25 06:58, 10F

02/25 06:58, 7年前 , 11F
內的工作表
02/25 06:58, 11F
照著您的方式,我最後試成功的語法是 ThisWorkbook,整句是這樣: Set JSheet = ThisWorkbook.Worksheets("工作表名稱") 感謝你! ※ 編輯: homelife (1.169.254.239), 02/25/2019 16:18:13
文章代碼(AID): #1SSNbpCN (Office)
文章代碼(AID): #1SSNbpCN (Office)