从 Excel 中的模块获取代码

Get code from module in Excel

我有许多工作簿都有宏,这些宏使用代码中嵌入的连接字符串指向特定的 SQL 服务器。我们已经迁移到一个新的 SQL 服务器,所以我需要检查这些并更改连接字符串以查看每个明确提及它的宏中的新服务器。

目前我能够列出工作簿中的所有模块,但是我无法从每个模块中获取代码,只能获取名称和类型编号。

for vbc in wb.VBProject.VBComponents:
    print(vbc.Name + ": " + str(vbc.Type) + "\n" + str(vbc.CodeModule))

什么 属性 存储代码以便我可以查找和替换服务器名称?我浏览了 VBA 和 pywin32 文档,但找不到任何内容。

知道了 - CodeModule 对象中有一个 Lines 方法,允许您根据起始行和结束行进行选择。将它与 CountOfLines 属性 结合使用可以让您获得全部内容。

for vbc in wb.VBProject.VBComponents:
    print(vbc.Name + ":\n" + vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines))

同样值得注意的是,第一行是第 1 行,而不是第 0 行,因为这让我很困惑。以下将出错 vbc.CodeModule.Lines(0, vbc.CodeModule.CountOfLines - 1) 因为索引 0 超出范围。

属性 代码模块的方法行具有签名

Function Lines(ByVal first as Integer, ByVal count as Integer) as String

第一个在范围 1...CodeModule.CountOfLines, 代码部分第一行的索引,你想 检索

count 在范围 1...CodeModule.CountOfLines-first+1, 本节行数

return 值是该部分的代码行与分隔符 vbNewLine 的串联。