Python 从Excel中的模块获取代码

Python 从Excel中的模块获取代码,python,vba,excel,pywin32,Python,Vba,Excel,Pywin32,我有许多工作簿,其中包含宏,这些宏使用代码中嵌入的连接字符串指向特定的SQL server。我们已经迁移到一个新的SQL server,所以我需要遍历这些,并更改连接字符串,以便在每个显式提到它的宏中查看新服务器 目前我可以列出工作簿中的所有模块,但是我无法从每个模块中获取代码,只有名称和类型号 for vbc in wb.VBProject.VBComponents: print(vbc.Name + ": " + str(vbc.Type) + "\n" + str(vbc.Code

我有许多工作簿,其中包含宏,这些宏使用代码中嵌入的连接字符串指向特定的SQL server。我们已经迁移到一个新的SQL server,所以我需要遍历这些,并更改连接字符串,以便在每个显式提到它的宏中查看新服务器

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

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行,因为这让我很吃惊。由于索引0超出范围,以下错误将出现
vbc.CodeModule.Lines(0,vbc.CodeModule.CountOfLines-1)

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

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

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

属性CodeModule的方法行具有签名

Function Lines(ByVal first as Integer, ByVal count as Integer) as String
第一个是范围1…CodeModule.CountOfLines, 代码段第一行的索引,您要 取回

计数在范围1…CodeModule.CountOfLines first+1, 节的行数


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

属性CodeModule的方法行具有签名

Function Lines(ByVal first as Integer, ByVal count as Integer) as String
第一个是范围1…CodeModule.CountOfLines, 代码段第一行的索引,您要 取回

计数在范围1…CodeModule.CountOfLines first+1, 节的行数

返回值是段的代码行与分隔符vbNewLine的串联