python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python运行Excel VBA宏

Python运行Excel VBA宏的方法实践

作者:沐沐森的故事

本文主要介绍了Python运行Excel VBA宏的方法实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、Excel运行VBA宏

1、启动开发工具

打开Excel文件,转到"文件">"选项">"自定义功能区"

然后,在" 自定义功能区"部分 的主 选项卡下,选中" 开发工具 "复选框,然后按" 确定"*

在这里插入图片描述

2、打开VBA编辑器

在"开发工具"选项卡上,选择"Visual Basic ",打开宏编辑器 。

在宏编辑器中,转到"插入">"模块",打开代码编辑区

在这里插入图片描述

3、运行VBA宏

在VBA编辑中输入VBA代码

选择要运行的宏,将光标放在宏内的任意位置,然后按F5,或在菜单上,转到"运行>宏"。

在这里插入图片描述

下面以生成一个图表为列,

Sub CreateScatterChartWithLine()
    Dim ws As Worksheet
    Dim chartObj As ChartObject
    Dim chartRange As Range
    
    ' 设置工作表
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 设置图表范围
    Set chartRange = ws.Range("A1:B" & ws.Cells(Rows.Count, "A").End(xlUp).Row)
    
    ' 创建散点图
    Set chartObj = ws.ChartObjects.Add(Left:=200, Width:=1000, Top:=20, Height:=500)
    chartObj.Chart.ChartType = xlXYScatterLinesNoMarkers ' 设置图表类型为散点图带直线
    
    ' 设置图表数据源
    chartObj.Chart.SetSourceData Source:=chartRange
End Sub

下图为使用该宏生成的图表

在这里插入图片描述

二、Python运行Excel VBA宏

1、导出VBA宏

在宏编辑器中,转到"文件">"导出文件",对宏进行保存

在这里插入图片描述

2、更改宏安全设置

转到"文件">"选项">"信任中心">"信任中心设置"

然后,在" 宏设置"选项卡下,选中" 启用VBA宏 "复选框和勾选" 信任对VBA工程对象模型的访问(V) ",然后按" 确定"*

在这里插入图片描述

3、Python运行宏

在运行代码前安装pywin32库

下面的代码打开了一个Excel工作簿,然后将VBA宏导入到Excel文件中,然后运行这个宏

其中excel_file_path为Excel文件路径,vba_macro_file为VBA宏文件路径,宏文件为上文中导出的.bas文件

import win32com.client as win32

def add_and_run_vba_macro(excel_file_path, vba_macro_file):
    # 创建一个 Excel 实例

    excel = win32.Dispatch("Excel.Application")

    excel.Visible = True  # 如果需要显示 Excel 界面,可以设置为 True

    # 打开 Excel 工作簿
    workbook = excel.Workbooks.Open(excel_file_path)  # 替换为您的工作簿路径

    # 导入 VBA 宏文件
    vba_module = workbook.VBProject.VBComponents.Import(vba_macro_file)  # 替换为您的宏文件路径

    # 运行 VBA 宏
    excel.Application.Run("CreateScatterChartWithLine")  # 替换为您的宏的名称

    # 保存工作簿
    workbook.Save()

    # 关闭工作簿和 Excel
    workbook.Close()
    excel.Quit()

三、Python批量化添加VBA宏和运行宏

import os
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
from ttkthemes import ThemedStyle  # 导入ThemedStyle
import win32com.client as win32

# 创建主窗口
root = tk.Tk()
root.title("CSV to Excel Converter")

# 创建并应用主题样式
style = ThemedStyle(root)
style.set_theme("arc")  # 选择一个主题,例如"arc"


# 批量为Excel添加VBA宏和执行宏
def batch_add_and_run_vba_macro():
    input_folder = input_folder_var.get()
    vba_macro_file = vba_macro_entry.get()

    # 获取excel文件列表
    excel_files = [f for f in os.listdir(input_folder) if f.endswith('.xlsx')]

    for i, excel_file in enumerate(excel_files):
        excel_path = os.path.join(input_folder , excel_file)
        root.update()
        # 在Excel文件中添加VBA宏并运行
        add_and_run_vba_macro(excel_path, vba_macro_file)

def add_and_run_vba_macro(excel_file_path, vba_macro_file):
    # 创建一个 Excel 实例

    excel = win32.Dispatch("Excel.Application")

    excel.Visible = True  # 如果需要显示 Excel 界面,可以设置为 True

    # 打开 Excel 工作簿
    workbook = excel.Workbooks.Open(excel_file_path)  # 替换为您的工作簿路径

    # 导入 VBA 宏文件
    vba_module = workbook.VBProject.VBComponents.Import(vba_macro_file)  # 替换为您的宏文件路径

    # 运行 VBA 宏
    excel.Application.Run("CreateScatterChartWithLine")  # 替换为您的宏的名称

    # 保存工作簿
    workbook.Save()

    # 关闭工作簿和 Excel
    workbook.Close()
    excel.Quit()


def browse_input_folder():
    folder = filedialog.askdirectory()
    if folder:
        input_folder_var.set(folder)

def browse_vba_macro():
    file_path = filedialog.askopenfilename(filetypes=[("VBA Macro Files", "*.bas")])
    vba_macro_entry.delete(0, tk.END)
    vba_macro_entry.insert(0, file_path)


# 创建文件选择按钮和标签
input_folder_label = ttk.Label(root, text="选择Excel文件夹:")
input_folder_label.grid(row=0, column=0, padx=10, pady=10, sticky="w")
input_folder_var = tk.StringVar()
input_folder_entry = ttk.Entry(root, textvariable=input_folder_var, state="readonly")
input_folder_entry.grid(row=0, column=1, padx=10, pady=10, sticky="ew")
input_folder_button = ttk.Button(root, text="浏览", command=browse_input_folder)
input_folder_button.grid(row=0, column=2, padx=5, pady=10)

vba_macro_label = ttk.Label(root, text="选择VBA宏文件:")
vba_macro_label.grid(row=1, column=0)
vba_macro_var = tk.StringVar()
vba_macro_entry = ttk.Entry(root, textvariable=vba_macro_var, width=40)
vba_macro_entry.grid(row=1, column=1, padx=10)
vba_macro_button = ttk.Button(root, text="浏览", command=browse_vba_macro)
vba_macro_button.grid(row=1, column=2)


# 创建转换按钮
convert_button = ttk.Button(root, text="开始执行", command=lambda: batch_add_and_run_vba_macro())
convert_button.grid(row=2, column=0, columnspan=3, pady=20)

root.mainloop()

以上代码是一个可视化的UI操作界面,该界面允许你选择一个Excel文件夹和选择一个VBA宏文件,从而可以对文件夹中的Excel进行批量的添加VBA宏并执行宏。

四、打包

安装PyInstaller库

import sys
from PyInstaller.__main__ import run

if __name__ == '__main__':
    sys.argv.extend(['--name=CSVToExcelConverter',
                     '--onefile',
                     '--windowed',
                     'main.py'])  # 将'your_script.py'替换为实际的应用程序文件名
    run()

新建一个build.py文件,在终端中运行python build.py进行打包。

到此这篇关于Python运行Excel VBA宏的方法实践的文章就介绍到这了,更多相关Python运行Excel VBA宏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文