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

如何将值作为整数从Python传递到VBA宏而不出错?,python,excel,vba,Python,Excel,Vba,我一直致力于自动化我工作中的一些报告任务,并一直在使用Selenium和Python进行WebDrive,然后将数据导入Excel,然后触发电子表格中的VBA宏,以我需要的方式组织数据 我知道VBA可以使用Selenium,我知道Python可以编辑Excel工作表,但我发现它们最适合我给它们的任务 通过让Python仅仅触发一个宏来集成它们,我没有什么困难,然后它的工作就完成了。但是,这次我尝试将某些变量传递到宏中 我将使用括号来表示敏感信息,尽管这可能不好,因为括号当然用于代码中,但不要担心

我一直致力于自动化我工作中的一些报告任务,并一直在使用Selenium和Python进行WebDrive,然后将数据导入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])
,然后将
[code]作为整数添加到VBA函数传递变量的部分

这会导致错误:

  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)
文件“”,第14行,正在运行
文件“C:\Program Files(x86)\Python37-32\lib\site packages\win32com\client\dynamic.py”,第287行,在_ApplyTypes中_
结果=self.\u oleobj.\u.InvokeTypes(*(dispid、LCID、wFlags、retType、argTypes)+args)
pywintypes.com_错误:(-2147352567,‘发生异常’,(0,无,无,无,0,-2147352566),无)
很明显,这似乎是某种类型的类型错误,但如果我确保匹配类型,我不确定为什么。Python和VBA对整数有不同的定义吗?也许我只是不正确地匹配了类型

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


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

@xidgel回答正确。我需要为VBA not Integer使用Long数据类型。

尝试在VBAA中作为变量传递Python
Integer
与VBA
Integer
不同-这是一种16位有符号数据类型(
short
Long
是32位有符号类型(
int
),而
LongLong
是64位。如果[code]是54151354,则需要在VBA中使用
Long
Integer
的范围是[-32768,32767]@数字不匹配,但这确实允许我传递它们。非常感谢。一般来说,了解Excel是件好事。