为 Excel VBA 创建常量库的理想方法是啥?
Posted
技术标签:
【中文标题】为 Excel VBA 创建常量库的理想方法是啥?【英文标题】:What's the ideal way to create a constant library for Excel VBA?为 Excel VBA 创建常量库的理想方法是什么? 【发布时间】:2021-05-16 16:54:51 【问题描述】:我希望创建一个用于结构计算的函数集合。这个想法是有一个模块或类似的我可以导入到 Excel 工作簿中,然后开始使用 VBA 中的函数来满足我的需要。
我最初需要做的是用数据常量定义一些标准变量。例如管道数据的集合:商业名称、内径、外径、每米重量等。它是一个常量库:工业管道都是相同的,并且随着时间的推移不会发生太大变化。
在 VBA 中执行此操作的最佳方法是什么?最初我认为一个普通的旧公共数组或字典可能会做到这一点。有了字典,我可以做一些事情:
pipe_diameter = pipes("HSS100x100x3")
但是有初始化的问题。我会将管道数据保存在模块中的代码中,但我必须记住在每段代码的开头调用一个 init_pipes 子程序,以便将数据加载到数组中并使其可用。
另外,我想我必须为每个管道参数做一个字典:pipes_diameter、pipes_unitweight、pipes_sectionarea 等。编码听起来不是很有趣。
所以向上移动,我想我可以创建一个管道类。然后执行以下操作:
Dim pipedata as pipes
pipe_diameter = pipes.innerdiam("HSS100x100x3")
所有相关数据都将存储在类模块中。加载模块,创建你的对象,你就可以得到可用的数据了。我必须考虑如何组织课程以使其能够检索和更新数据,但它看起来是迄今为止最有希望的选择。
我是对的,还是有一种更简单的方法可以做到这一点,而不涉及 VBA 中的自定义类?
【问题讨论】:
把所有数据放在一个工作表上,后面加上一些数据访问代码(属性),然后导入隐藏?叫它“管道”?即使使用您当前的方法,您也不必每次都调用“init” - 您的查找会检查已初始化的字典,然后如果它不存在,则在返回值之前对其进行初始化。 【参考方案1】:共享图书馆工作簿的最佳方式是 Excel 的内置功能,称为“个人工作簿”。这是存储在 XLSTART 文件夹中的工作簿。
有一个机器级别的 XLSTART 文件夹将为任何用户打开,这需要管理员安装工作簿。对于普通用户,您可以将工作簿共享到其他用户的个人工作簿区域。
图案是这样的:
C:\Users\$USERNAME\AppData\Local\Microsoft\Excel\XLStart
既然您知道如何共享一个将在 Excel 启动时自动打开的个人工作簿,您就可以设计您的解决方案了。
我建议将管道数据放入工作簿工作表中的表格中。然后,您可以将数据提取到您将向用户公开的任何 VBA 函数中。
这样,一旦代码稳定了,就可以在不修改代码的情况下改变sheet中的底层数据。始终建议将数据和代码分开。
字典只适用于键/值对。您想为管道创建自定义类对象,其中包含您需要从电子表格中填写的所有字段。然后,您可以动态地将数据从工作表中拉入管道对象的集合中。
Official Documentation
【讨论】:
以上是关于为 Excel VBA 创建常量库的理想方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
用VBA直接在WORD中能正常运行的方法或属性相关常量设置,在EXCEL中处理WORD文档时都有哪些变化?
在VBA(excel)中循环遍历行的最有效/最快的方法是啥?