Python运行Excel VBA宏

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Python运行Excel VBA宏
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 Excel VBA宏的调用

为初学者节省宝贵的学习时间,避免困惑!

TechX 教程效果:

在这里插入图片描述



一、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进行打包。


在这里插入图片描述




TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐沐森的故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值