| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 891 人关注过本帖
标题:关于python调用VBA代码的问题
只看楼主 加入收藏
螭蛊
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2023-2-24
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
关于python调用VBA代码的问题
请教各位大神,我在excel工作薄A中存放了VBA代码,现在使用python在工作薄B中调用工作薄A中的代码,请问如何调用,试了半天总报错,不知道哪里错了
搜索更多相关主题的帖子: 代码 工作 VBA 调用 python 
2023-02-24 10:31
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏
得分:5 
使用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()

会当凌绝顶,一览众山小.
2023-02-26 10:55
螭蛊
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2023-2-24
收藏
得分:0 
回复 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
横道图 .rar (17.58 KB)



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

2023-02-26 16:27
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:32
帖 子:412
专家分:1646
注 册:2023-1-24
收藏
得分:0 
试着把工作簿与Python代码放到同一目录里,直接Open工作簿名称.

会当凌绝顶,一览众山小.
2023-02-27 20:35
螭蛊
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2023-2-24
收藏
得分:0 
回复 4楼 东海ECS
excel.Run("D:\练习\python\xlwings\横道图.xlsm!VBA_Code")  这句的后面改成     VBA_代码名字      吗?  
放一个文件夹里也不行,报错,显示找不到   横道图.xlsm

我把VBA的代码和工作薄A上传一下,请大神帮忙处理发我下,确实不会了,跪拜!!!工作薄B搞成一样的,或者时间改下就行
工作薄A及代码.rar (10.63 KB)
2023-02-28 10:29
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
回复 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()

DO IT YOURSELF !
2023-02-28 15:36
螭蛊
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2023-2-24
收藏
得分:0 
回复 6楼 wp231957
这个库我也装了,这个代码和需求不太一样,我是想把代码存放在一个工作薄A里,以后遇到类似的问题比如工作薄B工作薄C什么的,直接在工作薄A调用。而且像工作薄B、C这种文件就是*.xlsx格式了,不存放代码了,如果全部存了代码直接在excel里运行就好了,就不需要用python操作了

还是非常感谢,看能不能救人救到底!!!
2023-02-28 16:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 7楼 螭蛊
那你放python里多好
我好像有搜到相关内容,但是没过多关注

DO IT YOURSELF !
2023-02-28 16:57
sheeboard
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:16
帖 子:79
专家分:442
注 册:2023-2-16
收藏
得分:5 
有没有考虑用纯python处理,用matplotlib画timeline图贴上去,或是麻烦点自己用openpyxl写个function。
2023-02-28 21:01
快速回复:关于python调用VBA代码的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083902 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved