作者Kamikiri (☒☒)
看板Office
标题[算表] VBA用字典暂存值但无法完全取回
时间Thu Sep 19 15:02:33 2019
软体: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://webptt.com/cn.aspx?n=bbs/Office/M.1568876556.A.2DA.html
1F:→ newacc: 因为你Resize後只有涵盖到G栏? 09/19 15:14
3F:→ newacc: 试试看把Resize的两个参数都填上,UBound使用方式如连结 09/19 15:15
4F:→ newacc: 不过是说,你现在贴的code,贴回原工作表的这个动作并没有 09/19 15:23
5F:→ newacc: 用到字典,是直接从记忆体里叫arr出来,是否是被节录掉了? 09/19 15:24
6F:→ Kamikiri: 原来从字典取出要打完全的位址....我以为只需要打第一格 09/23 18:20
7F:→ Kamikiri: 看来是我误会了 我以为Resize前的位址是贴上的位址 09/23 18:21
8F:→ Kamikiri: 但看来应该不是 而是取出的位置吧? 09/23 18:21
9F:→ Kamikiri: 总之改成cells後已经解决了 可以成功取出 09/23 18:21