萝卜头python:PYTHON 与VBA互调

2020-05-07  本文已影响0人  萝卜头科技

1、python调用 VBA
假定我们的excel里边有个vba函数:foo,参数是args

其 VBA函数为

Sub test()    《============这个函数很重要,对应着python
Dim m
m = 1
Columns("G:G").Select
m = 1
On Error GoTo Err_Handle

For m = 1 To 65
Selection.Find(What:="男", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, MatchByte:=False, SearchFormat:=False).Activate
ActiveCell.Replace What:="男", Replacement:="1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next m

Exit Sub
Err_Handle:
End Sub

PYTHON 调用

  1. 必须另存为xlsm文件格式

2. 第二,在执行Python脚本的时候必须是打开excel的

3. 必须新建模块(vba中)

4. vba代码必须有函数

5. office必须开启宏,否则不生效  6. 打开vba快捷键alt + f11


模块.png
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import win32com.client  #导入模块
filename = "C:/Users/Administrator/Desktop/test.xlsm"
xls=win32com.client.Dispatch("Excel.Application")
xls.Workbooks.Open(Filename=filename)   #文件路径
xls.DisplayAlerts = 0  #不显示警告信息
ret = xls.Application.Run("foo", args)     #vba函数即参数

xls.Application.Quit()      #运行完退出

2、xlwings:操作Excel,通过宏调用Pyhton(VBA调Python)
原文:
https://blog.csdn.net/qcyfred/article/details/80300354
xlwings的安装方式(更简单,如果有效的话,但不确定是否有效,慎重!)
1)安装xlwings
pip install xlwings -i https://pypi.tuna.tsinghua.edu.cn/simple

查看版本
xlwings -V
显示最新版 :
xlwings 0.19.1
2)安装addin --是XLwings自带的
xlwings addin install
3)找到xlwings的addin文件夹,打开xlwings.xlam文件:
位置:
C:\Program Files\Anaconda3\Lib\site-packages\xlwings\addin\xlwings.xlam
双击打开文件xlwings.xlam


image.png

勾选RunPython: Use UDF Server

这样一旦执行py的话,会启一个黑窗口,此后执行py速度要比不勾选快

4)在EXCEL上,勾选VBA对xlwings支持:
开发工具--查看代码
打开代码选项。
然后:工具-应用--选择 xlwings


image.png

5)配置编译器 和 需要执行的py文件路径

image.png

interpreter:编译器,找到python.exe(我的是anaconda 3, 一步到位)
PYTHONPATH:py文件路径

6) 写宏,插入按钮,绑定宏

Sub hi()

    RunPython ("from xw import say_hi; say_hi()")  ‘xw为py文件,say_hi为函数名

End Sub
image.png
image.png

say_hi.py文件内容:

# -*- coding: utf-8 -*-
import xlwings as xw
def say_hi():    
    wb = xw.Book.caller()
    sht = wb.sheets[0]
    sht.range('A1').value = 'Hello, world'

7)开发工具 - 插入 - 表单控件(按钮)

编辑文字,指定宏

最后,点击按钮,Done!

上一篇 下一篇

猜你喜欢

热点阅读