【发布时间】:2013-02-12 06:49:58
【问题描述】:
我有一个 Excel .xlam 文件,它在功能区中添加了一个按钮来执行以下操作:
- 扫描 ActiveSheet 以获取一些预设参数
- 获取我的源文本(一个字符串值,直接在 VBA 模块中硬编码)并将指定区域替换为从步骤 1 中检索到的参数
- 生成包含计算文本的文件
我以这种方式保存源文本,因为它可以受密码保护,并且我不需要在 .xlam 文件所在的任何地方拖动另一个文件。源文本保存在一个名为“Source”的单独模块中,看起来像这样(感谢 VBA 没有 Heredocs):
'Source Module
Public Function GetSource() As String
Dim s As String
s = ""
s = s & "This is the first line of my source text" & vbCrLf
s = s & "This is a parameter {par1}" & vbCrLf
s = s & "This is another line" & vbCrLf
GetSource = s
End Function
该功能运行良好。我的问题是,如果我想更新源文本,我现在必须在 .xlam 文件中手动执行此操作。我想做的是在另一个模块中构建类似Sub ImportSource() 的东西,它将解析一些文件,以编程方式重建“源”模块,然后用我计算的源代码替换该模块。我不知道是否/如何用字符串变量中的某个值替换模块的源代码。
这就像最糟糕的元编程,从哲学上讲,我反对这样做,直到我的核心。但实际上,我想知道是否以及如何去做。
【问题讨论】:
-
您可以以编程方式“导出”和“导入”.bas 文件。要按照您的要求进行操作,就必须采用这种方法。我不相信可以修改内存中的代码。见this article
-
@Floris:应该可以。如果您将其作为答案,我可以将其标记为正确
-
不能解决您的问题,但在 XLAM 代码中存储常量的另一种方法是将它们存储在 XLAM 工作表上的单元格(最好是命名单元格)中。
-
@CharlesWilliams:问题是如果有人知道去哪里看,他们可以看到这些值而无需 VBA 宏的密码。即使您使用密码保护工作表,您仍然可以使用公式从另一个工作表访问它的值
-
好吧,除了加密的工作簿之外,所有 Excel 和 VBA 的安全性都很薄弱,而且很容易被破解,但是除非您至少知道内部工作表的名称,否则您无法访问 XLA 内工作表上的单元格XLA,如果不破解 XLA,你就看不到这一点