问题

有同学在工作中会用到VBA,想要将影刀与Excel中的VBA结合,将在影刀中输入的数值传递到VBA中,然后再将计算结果传递回来。

解决方案

无法直接进行参数传递,需要借助python实现。

1、如图,假设在VBA中定义一个函数

image-202401050207555

Function MySubroutine(MyInput1 As Integer, MyInput2 As Integer) As String
    Dim result As String
    result = "The sum is " & (MyInput1 + MyInput2)
    MySubroutine = result
End Function

2、在影刀的pyhon模块输入以下代码:

# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块

import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import win32com.client

def main(my_input1,my_input2):
    # 创建Excel应用程序对象
    excel = win32com.client.Dispatch("Excel.Application")

    # 打开工作簿并选择工作表
    workbook = excel.Workbooks.Open(r"D:\desktop\1.xlsm")
    worksheet = workbook.Worksheets("Sheet1")

    # 调用VBA子程序并传递参数  
    vba_result=worksheet.Application.Run("MySubroutine", my_input1, my_input2)

    # 关闭工作簿和Excel应用程序
    workbook.Close()
    excel.Quit()
    
    #返回结果
    return vba_result

3、在主流程进行调用并传递参数

image-202401050207556

4、结果如图

image-202401050207557

5、效果演示

image-202401050207558

作者:小曼 来源:影刀社区