gpt4 book ai didi

vba - Excel VBA是否可以更改另一个模块中模块的源代码

转载 作者:行者123 更新时间:2023-12-02 09:52:25 24 4
gpt4 key购买 nike

我有一个 Excel .xlam 文件,它在功能区中添加一个按钮来执行以下操作:

  1. 扫描 ActiveSheet 以获取一些预设参数
  2. 获取我的源文本(字符串值,直接硬编码在 VBA 模块中)并使用从步骤 1 检索到的参数替换指定区域
  3. 生成包含计算文本的文件

我以这种方式保存源文本,因为它可以受到密码保护,而且我不需要在 .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() 的东西,该模块将解析某些文件,以编程方式重建“源”模块,然后用我计算的源代码替换该模块。我不知道是否/如何用字符串变量中的某个值替换模块的源代码。

这就像最糟糕的元编程,从哲学上讲,我从根本上反对这样做。但实际上,我想知道是否以及如何做到这一点。

最佳答案

我现在意识到,您真正想要做的是以 VBA 可以访问的方式在文档中存储一些值,但电子表格的用户无法读取这些值。按照 Charles Williams 建议将值存储在工作表中的命名范围中,并解决您不希望用户访问这些值的担忧,您必须加密字符串...

this article 中描述了执行此操作的“正确方法” - 但这是一项相当大的工作。

发现了一个更短的例程 here 。它只是使用简单的 XOR 加密和硬编码 key - 但它应该足以满足“大多数用途”。 key 将“隐藏”在宏中,因此无法被窥探(嗯,不容易)。

现在您可以使用此函数(我们称之为加密(字符串))将字符串转换为电子表格中的值:

range("mySecretCell").value = encrypt("The lazy dog jumped over the fox")

当你需要使用它时,你使用

Public Function GetSource()
GetSource = decrypt(Range("mySecretCell").value)
End Function

如果您使用XOR版本(第二个链接),加密解密将是相同的函数...

这能更好地满足您的需求吗?

关于vba - Excel VBA是否可以更改另一个模块中模块的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com