从Excel中的模块获取代码

时间:2016-09-09 09:16:09

标签: python excel vba excel-vba pywin32

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

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

synonyms.txt

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

2 个答案:

答案 0 :(得分:1)

知道了 - 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超出范围。

答案 1 :(得分:0)

属性CodeModule的方法行具有签名

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

首先在1 ... CodeModule.CountOfLines范围内, 您要在代码部分的第一行的索引 检索

count在1 ... CodeModule.CountOfLines-first + 1范围内, 该部分的行数

返回值是该节的代码行与分隔符vbNewLine的串联。