2014-05-06 30 views
1

调用宏时,当我打电话下面从VBScript宏为什么我收到类型不匹配错误为什么我从VBScript

宏在parameter.xlsm

Sub Proc(sParam1 As String, iParam2 As Integer) 
MsgBox sParam1 & " is " & iParam2 & " Years Old" 
End Sub 

VB Script代码

得到类型不匹配错误
Dim objExcel,objWorkbook 

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("C:\ExcelFiles\parameter.xlsm") 
sParam1 = Inputbox("Enter the first parameter") 
iParam2 = Inputbox("Enter the second parameter") 
iParam3= CInt(iParam2) 

objExcel.Application.Visible = True 

objExcel.Application.Run "parameter.xlsm!Proc",sParam1,iParam3 
objExcel.ActiveWorkbook.Close 

objExcel.Application.Quit 
WScript.Echo "Finished." 
WScript.Quit 

回答

0

尝试在VBScript中明确声明的变量...我也工作簿中的代码所使用的long出于习惯。

代码中parameter.xlsm:

Option Explicit 
Sub Proc(sParam1 As String, iParam2 As Long) 
    MsgBox sParam1 & " is " & iParam2 & " Years Old" 
End Sub 

VBScript代码:

Dim objExcel As Object 
Dim objWorkbook As Workbook 
Dim sParam1 As String 
Dim iParam2 As Long, iParam3 As Long 

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("C:\ExcelFiles\parameter.xlsm") 
sParam1 = InputBox("Enter the first parameter") 
iParam2 = InputBox("Enter the second parameter") 
iParam3 = CInt(iParam2) 

objExcel.Application.Visible = True 

objExcel.Application.Run "parameter.xlsm!Proc", sParam1, iParam3 
objExcel.ActiveWorkbook.Close 

objExcel.Application.Quit 
WScript.Echo "Finished." 
WScript.Quit 
+0

我认为我们不能在VBS中将变量调暗为特定值,并且如果我们尝试Dim变量作为任何事情,它都会抛出一个错误。在仅修改以上脚本objExcel.Application.Run“parameter.xlsm!Proc”,CStr(sParam1),CInt(iParam3)的脚本之后。它工作 – user3591858

+0

伟大的一点,我的一个重大错误 - 所有变量在VBScript是变种。很高兴你有这个排序! –

0

在你的程序中,你串联了字符串,但第二个参数的类型是integer。你需要转换为字符串首先使用CSTR的()函数

Sub Proc(sParam1 As String, iParam2 As Integer) 
MsgBox sParam1 & " is " & CStr(iParam2) & " Years Old" 
End Sub 
+0

碱式,在不改变我的程序,如果我对sParam1输入值 “大卫” 和iParam3 30手动我是没有得到任何错误 – user3591858

+0

对不起,这是我能想到的所有=(我认为这是抛出错误的objExcel.Application.Run? – Pepto