ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 435|回复: 10

[已解决] vba能不能让数组或者字典写入数据之后还能重复使用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-22 14:59 | 显示全部楼层 |阅读模式
本帖最后由 Learner2022 于 2024-1-22 19:07 编辑

比如说我让vba在表1a1读取内容然后写入数组,然后写入到表2a1,然后下次不需要再读取数据直接写入,我有这个问题是因为我需要读取的数据太多了每次都要花费很长时间,所以想看看可不可以这样做,谢谢各位大神

TA的精华主题

TA的得分主题

发表于 2024-1-22 15:07 | 显示全部楼层
设置全局变量就可以了,不需要改动的时候不要给它再赋值。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-22 15:13 | 显示全部楼层
因为没有具体案例。所以猜测来想方案,方案1,结果数组brr写入到临时表中,下次直接读取临时表,省却了前面的计算过程。方案2,结果数组brr写入单元格后,没有释放数组的话,数组中数据依旧存在的。可以反复写入读取,在模块顶部写Public brr 声明全局变量,其他过程也可以读取brr。

TA的精华主题

TA的得分主题

发表于 2024-1-22 15:16 | 显示全部楼层
A过程生成结果数组brr 再次执行A过程的时候,可以判断brr是否为空,如果不为空可以不执行A过程。这样只需要执行1次A过程。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-22 15:19 | 显示全部楼层
本帖最后由 feilanga 于 2024-1-22 15:20 编辑

字典是一样的道理。模块顶部声明全局字典Public dic全局 As Dictionary   
Public dic全局 As Object  '声明全局变量,后期绑定
Function 全局字典初始化()
    If Not dic全局 Is Nothing Then Exit Function '如果全局字典不为空就退出
    Set dic全局 = CreateObject("scripting.dictionary")
    Dim arr, i, key
    arr = Sheet1.Range("a1:g" & Sheet1.Cells(Rows.Count, 1).End(xlUp).Row).Value
    '源数据装入字典
    For i = 2 To UBound(arr) '从第二行开始循环
        key = arr(i, 1) & "," & arr(i, 2) & "," & arr(i, 3) '关键字所在的列
        dic全局(key) = dic全局(key) & "," & i  '多次记录字典中关键字key对应的行号,用逗号隔开
    Next
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-22 20:24 | 显示全部楼层
feilanga 发表于 2024-1-22 15:16
A过程生成结果数组brr 再次执行A过程的时候,可以判断brr是否为空,如果不为空可以不执行A过程。这样只需要 ...

老哥这个原理是啥,我在论坛还有官网都只是在说声明全局变量的作用是在任何模块和过程中都可以调用这个变量,没说它可以存储数组上次运行写入的数据

TA的精华主题

TA的得分主题

发表于 2024-1-22 21:39 | 显示全部楼层
Learner2022 发表于 2024-1-22 20:24
老哥这个原理是啥,我在论坛还有官网都只是在说声明全局变量的作用是在任何模块和过程中都可以调用这个变 ...

那么为什么要调用全局变量呢?自然是里面有你需要的数据

TA的精华主题

TA的得分主题

发表于 2024-1-22 22:46 | 显示全部楼层
在没有关闭工作簿的时候,全局变量可以一直使用
如果是关闭工作簿的情况,啥也没有用,除了赋值到工作表中保存下来,下次调用,要不没有办法解决

TA的精华主题

TA的得分主题

发表于 2024-1-22 23:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
读取数据花时间很多吗?  ar=range("a1:z999").value ,这不是一下就读完了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-23 08:42 | 显示全部楼层
micch 发表于 2024-1-22 23:56
读取数据花时间很多吗?  ar=range("a1:z999").value ,这不是一下就读完了?

我有五列1472行的数字,写入一个五维的数组,我用了论坛里如下的这个不打开工作簿获取数据的方法,所以读取很慢
  1. Public Function GetValue(path, file, sheet, ref)
  2. '   Retrieves a value from a closed workbook
  3.     Dim arg As String

  4. '   Make sure the file exists
  5.     If Right(path, 1) <> "" Then path = path & ""
  6.     If Dir(path & file) = "" Then
  7.         GetValue = "File Not Found"
  8.         Exit Function
  9.     End If

  10. '   Create the argument
  11.     arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
  12.       Range(ref).Address(, , xlR1C1)

  13. '   Execute an XLM macro
  14.     GetValue = ExecuteExcel4Macro(arg)
  15. End Function
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-19 11:05 , Processed in 0.044347 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表