【问题标题】:Calling vba function(with parameters) from vbscript and show the result从 vbscript 调用 vba 函数(带参数)并显示结果
【发布时间】:2025-12-08 15:05:02
【问题描述】:

我有以下 vba 函数(在 Excel 文件的模块中)

Public Function validate_fncname(strFncname As String) As Boolean
.
.
.
validate_fncname  = True
End Function

我写了下面的 vbscript 来调用它:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook =  objExcel.Workbooks.Open("C:\Users\uidu8611\Desktop\CAM0500040F10_SW_Quality_Assurance_Report_Template(new_version).xlsm")

objExcel.Application.Visible = True

Dim str
str ="hello"

Dim validate_fncname 

 validate_fncname =  objExcel.Application.Run("'C:\Users\uidu8611\Desktop\CAM0500040F10_SW_Quality_Assurance_Report_Template(new_version).xlsm'!validate_fncname", str)

Wscript.Echo validate_fncname

但是,当我运行脚本时,它给了我该行的类型不匹配错误:

objExcel.Application.Run("'C:\Users\uidu8611\Desktop\CAM0500040F10_SW_Quality_Assurance_Report_Template(new_version).xlsm'!validate_fncname", str)

尽管类型正确(字符串)

如果我将其更改为:

objExcel.Application.Run("'C:\Users\uidu8611\Desktop\CAM0500040F10_SW_Quality_Assurance_Report_Template(new_version).xlsm'!validate_fncname(5)")

它没有给我一个错误,虽然 5 是整数!

请问我的错在哪里?

【问题讨论】:

  • 你的第二个版本真的返回一个值吗?它看起来根本不起作用,因为这不是您使用 run 传递参数的方式。

标签: vba vbscript arguments


【解决方案1】:

您已经有了validate_fncname 方法,看起来不错(除了将返回值设置为True 之外,可能应该在if then 语句中完成,以避免将所有内容设置为True)。

当调用这个函数时,你应该能够做到以下几点:

Dim validateResult As Boolean
Dim str as String
str = "hello"
validateResult = validate_fncname(str)
Debug.Print validateResult

【讨论】:

    【解决方案2】:

    我玩了一段时间后遇到了同样的错误。
    就我而言,我只是想来回传递一个字符串。

    然后我查找了 VBScript 的 dim 语句,它说“所有 VBScript 变量都是变体”,所以我将电子表格上的函数更改为 Variant,这对我有用。希望这可以帮助其他遇到此线程的人。

    【讨论】: