注册 登录
编程论坛 Python论坛

关于python调用VBA代码的问题

螭蛊 发布于 2023-02-24 10:31, 949 次点击
请教各位大神,我在excel工作薄A中存放了VBA代码,现在使用python在工作薄B中调用工作薄A中的代码,请问如何调用,试了半天总报错,不知道哪里错了
8 回复
#2
东海ECS2023-02-26 10:55
使用python的xlwings库,可以在工作薄B中调用工作薄A中的VBA代码。下面是具体的示例代码:
程序代码:

import win32com.client

# 创建Excel应用程序对象
excel = win32com.client.Dispatch("Excel.Application")

# 打开工作薄A
workbookA = excel.Workbooks.Open("工作薄A.xlsx")

# 打开工作薄B
workbookB = excel.Workbooks.Open("工作薄B.xlsx")

# 调用工作薄A中的VBA代码
excel.Run("工作薄A.xlsx!VBA_Code")

# 关闭工作薄A
workbookA.Close()

# 关闭工作薄B
workbookB.Close()

# 关闭Excel应用程序
excel.Quit()
#3
螭蛊2023-02-26 16:27
回复 2楼 东海ECS
import win32com.client
# 创建Excel应用程序对象
excel = win32com.client.Dispatch("Excel.Application")
# 打开工作薄A
workbookA = excel.Workbooks.Open(r'D:\练习\python\xlwings\横道图.xlsm')
# 打开工作薄B
workbookB = excel.Workbooks.Open(r'D:\练习\python\xlwings\横道图.xlsx')
# 调用工作薄A中的VBA代码
excel.Run("D:\练习\python\xlwings\横道图.xlsm!VBA_Code")
# 关闭工作薄A
workbookA.Close()
# 关闭工作薄B
workbookB.Close()
# 关闭Excel应用程序
excel.Quit()
*************
把文件名改了下,运行会报错,调用那句没看懂,请指教!!!新手见笑
下面是报错的信息
我把存放VBA代码的工作薄上传了,就相当于工作薄A,,,,工作薄B就是*.xlsx格式了,不存放代码,直接从工作薄A中调用
**********
File "D:/练习/python/xlwings/test.py", line 15
    excel.Run("D:\练习\python\xlwings\横道图.xlsm!VBA_Code")
              ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 35-36: truncated \xXX escape
只有本站会员才能查看附件,请 登录



[此贴子已经被作者于2023-2-26 16:37编辑过]

#4
东海ECS2023-02-27 20:35
试着把工作簿与Python代码放到同一目录里,直接Open工作簿名称.
#5
螭蛊2023-02-28 10:29
回复 4楼 东海ECS
excel.Run("D:\练习\python\xlwings\横道图.xlsm!VBA_Code")  这句的后面改成     VBA_代码名字      吗?  
放一个文件夹里也不行,报错,显示找不到   横道图.xlsm

我把VBA的代码和工作薄A上传一下,请大神帮忙处理发我下,确实不会了,跪拜!!!工作薄B搞成一样的,或者时间改下就行
只有本站会员才能查看附件,请 登录
#6
wp2319572023-02-28 15:36
回复 5楼 螭蛊
这玩意好复杂
建议还是使用XLWINGS这个库,安装这个库 也蛮复杂的  具体操作可以百度一下
程序代码:

import xlwings as xw

app=xw.App(visible=True,add_book=False)

wb=app.books.open(r'横道图.xlsm')
wb.activate()
m=wb.macro("模块1.时间标尺")
m()
#wb.close()
#
app.quit()
#7
螭蛊2023-02-28 16:51
回复 6楼 wp231957
这个库我也装了,这个代码和需求不太一样,我是想把代码存放在一个工作薄A里,以后遇到类似的问题比如工作薄B工作薄C什么的,直接在工作薄A调用。而且像工作薄B、C这种文件就是*.xlsx格式了,不存放代码了,如果全部存了代码直接在excel里运行就好了,就不需要用python操作了

还是非常感谢,看能不能救人救到底!!!
#8
wp2319572023-02-28 16:57
回复 7楼 螭蛊
那你放python里多好
我好像有搜到相关内容,但是没过多关注
#9
sheeboard2023-02-28 21:01
有没有考虑用纯python处理,用matplotlib画timeline图贴上去,或是麻烦点自己用openpyxl写个function。
1