我有许多具有宏的工作簿,这些宏使用嵌入在代码中的连接字符串指向特定的 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 超出范围。
关于python - 从 Excel 中的模块获取代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39408029/