2022年 11月 5日

python与vba_萝卜头python:PYTHON 与VBA互调

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 调用

必须另存为xlsm文件格式

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

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

4. vba代码必须有函数

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

3992351432bf

模块.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

3992351432bf

image.png

勾选RunPython: Use UDF Server

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

4)在EXCEL上,勾选VBA对xlwings支持:

开发工具–查看代码

打开代码选项。

然后:工具-应用–选择 xlwings

3992351432bf

image.png

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

3992351432bf

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

3992351432bf

image.png

3992351432bf

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!