如何将值作为整数从Python传递到VBA宏中而不出错?

2024-09-30 10:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直致力于自动化我工作中的一些报告任务,并一直在使用Selenium和Python进行webdriving,然后将数据导入Excel,然后触发电子表格中的VBA宏,以我需要的方式组织数据。你知道吗

我知道VBA可以使用Selenium,Python可以编辑Excel工作表,但是我发现它们最适合我给它们的任务。你知道吗

通过让Python触发一个宏来集成它们,我几乎没有遇到什么困难,然后它的工作就完成了。但是,这次我尝试将某些变量传递到宏中。你知道吗

我将使用括号来表示敏感信息,尽管这可能是不好的,因为括号当然是在代码中使用的,但不要担心我的代码中没有括号。你知道吗

下面是触发宏的代码:

if os.path.exists(r"PATH.xlsm"):
    thisxl = wincl.Dispatch("Excel.Application")
    wby = thisxl.Workbooks.Open(os.path.abspath(r"PATH.xlsm"))
    thisxl.Application.Run("MODULE", [STRING_VARIABLE], [STRING VARIABLE], [INTEGER VARIABLE], [INTEGER VARIABLE])
    wby.Close(SaveChanges=1)
    thisxl.Quit()
    del thisxl

现在,如果我运行这个代码,它会很好地触发宏。唯一的问题是,其中一个变量是一个代码,它帮助将数据的某些组成元素与从web检索到的信息相匹配。换句话说,假设在我的数据集中有几个代表人的名字,其中一些是相同的——代码确保宏识别出唯一的个体。你知道吗

但当我试图匹配代码时,没有匹配的。所以我试着确保Excel和Python都知道这些代码是整数。你知道吗

当我将变量从python传递到VBA时,我尝试了int([CODE]),然后在VBA函数中传递变量的部分添加了[CODE] As Integer。你知道吗

这会导致错误:

  File "<COMObject <unknown>>", line 14, in Run
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352566), None)

很明显,这似乎是某种类型的错误,但我不知道为什么,如果我已经确保匹配的类型。Python和VBA对整数有不同的定义吗?也许我只是不正确地匹配了类型。你知道吗

此外,作为测试,我将传递的代码(在尝试将其作为整数传递之前)和excel文档中的代码进行了msg装箱,显示如下:

enter image description here

很明显,数字确实匹配,只是一些类型或格式问题。任何帮助都将不胜感激!你知道吗


Tags: 数据path代码none信息类型osselenium

热门问题