[算表] VBA用字典暫存值但無法完全取回

看板Office作者 (☒☒)時間4年前 (2019/09/19 15:02), 編輯推噓0(009)
留言9則, 2人參與, 4年前最新討論串1/1
軟體:OFFICE 365 EXCEL 版本:1908 程序如下 Dim dic, arr1, arr2 Set dic = CreateObject("Scripting.Dictionary") '建立字典 arr1 = Range(Cells(5, 1), Cells(20000, 1)) arr2 = Range(Cells(5, 7), Cells(20000, 36)) (其他程序中略,計算結果放在A5:A20000) dic(arr1) = arr1 '將A5:A20000存入字典 (其他程序中略,計算結果放在G5:G20000) dic(arr2) = arr2 '將計算結果G5:AJ20000存入字典 Cells(5, 1).Resize(UBound(arr1)) = arr1 '將存入字典的A5:A20000貼回原工作表的A5 Cells(5, 7).Resize(UBound(arr2)) = arr2 '將存入字典的G5:AJ20000貼回原工作表的G5 dic.RemoveAll '移除字典 這麼做的目的是因為計算時會需要先取代某些字串 但希望計算完之後能恢復成原來的字串 目前運作起來arr1是正常的,但arr2在放回G5時 卻都只有成功取回第1欄=G欄,G欄之後的值都沒有被正常取回工作表 稍微思考了一下,應該是我誤會了dic的用法 是因為dic只能保存key跟item所以不能超過2欄嗎? 如果我需要這種將值暫存在另一個Table的效果 需要用哪一個功能才有辦法達成呢? 有想過要改用VBA自動把值轉到隱藏工作表,等計算完再複製回去 但不知道為啥,從隱藏工作表複製20000列回原位置會跳error 1004 寫法如下 來源工作表.range(cells(5,1),cells(20000,1)).copy 目標工作表 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.94.55 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1568876556.A.2DA.html

09/19 15:14, 4年前 , 1F
因為你Resize後只有涵蓋到G欄?
09/19 15:14, 1F

09/19 15:14, 4年前 , 2F
09/19 15:14, 2F

09/19 15:15, 4年前 , 3F
試試看把Resize的兩個參數都填上,UBound使用方式如連結
09/19 15:15, 3F

09/19 15:23, 4年前 , 4F
不過是說,你現在貼的code,貼回原工作表的這個動作並沒有
09/19 15:23, 4F

09/19 15:24, 4年前 , 5F
用到字典,是直接從記憶體裡叫arr出來,是否是被節錄掉了?
09/19 15:24, 5F

09/23 18:20, 4年前 , 6F
原來從字典取出要打完全的位址....我以為只需要打第一格
09/23 18:20, 6F

09/23 18:21, 4年前 , 7F
看來是我誤會了 我以為Resize前的位址是貼上的位址
09/23 18:21, 7F

09/23 18:21, 4年前 , 8F
但看來應該不是 而是取出的位置吧?
09/23 18:21, 8F

09/23 18:21, 4年前 , 9F
總之改成cells後已經解決了 可以成功取出
09/23 18:21, 9F
文章代碼(AID): #1TWoWCBQ (Office)