【问题标题】:Getting value in VBscript from VBA Excel Macro Function从 VBA Excel 宏函数中获取 VBscript 的价值
【发布时间】:2018-11-08 18:59:39
【问题描述】:

对 VBscript 和 VBA 还很陌生...希望得到一些帮助,而且答案很简单...

我正在从 VBscript 调用 Excel VBA 中的宏/函数。对函数的调用应该返回一个数字。在 Excel 中使用 VBA 调试,该函数似乎工作正常(在此示例中,它显示值 1),但是当我调用宏/函数并尝试在 VBscript 中回显该值时,它显示为“空”。

如何将 VBA 中的值返回到 VBscript?
感谢您的帮助

VBscript代码示例:

Set excelOBJ = CreateObject("Excel.Application")
Set workbookOBJ = excelOBJ.Workbooks.Open("C:\variable.xlsm")

excelOBJ.Application.Visible = True
excelOBJ.DisplayAlerts = False

REM mostly for testing purposes
    Dim returnValue
    returnValue = 10

    Wscript.Echo "'returnValue' value before call to macro function = " & returnValue
    Wscript.Echo "'returnValue' TypeName before call to macro function = " & TypeName(returnValue)

returnValue = excelOBJ.Run("ThisWorkbook.getNum")

    Wscript.Echo "'returnValue' value after call to macro function = " & returnValue
    Wscript.Echo "'returnValue' TypeName after call to macro function = " & TypeName(returnValue)

excelOBJ.quit

Excel 中的 VBA 示例:

Public Function getNum()
    getNum = 1
    Debug.Print "getNum value = " & getNum
End Function

输出:

'returnValue' value before call to macro function = 10
'returnValue' TypeName before call to macro function = Integer

REM Inside Excel VBA editor
    getNum value = 1

'returnValue' value after call to macro function = 
'returnValue' TypeName after call to macro function = Empty

【问题讨论】:

  • 试试returnValue = excelOBJ.Run("'Variable.xlsm'!.getNum")
  • 谢谢,@PatricK。我尝试按照您的描述更改代码,但收到错误“无法运行宏 ''variable.xlsm'!.getNum'。此工作簿中可能没有该宏,或者所有宏都可能被禁用。”代码:800A03EC。在前 2 个 Wscript.Echo 窗口之后。我验证在 Excel 电子表格中启用了宏,但仍然遇到错误
  • 您的宏是在工作表中还是在模块中?如果宏不在模块中,您可能需要明确引用工作表名称。

标签: vba excel vbscript


【解决方案1】:

如果还没有,我建议您将代码移到模块中。

此代码应该更改

returnValue = excelOBJ.Run("ThisWorkbook.getNum")

如果代码在工作表中,假设您的工作表是“Sheet1”,这可能会起作用

returnValue = excelOBJ.Run("Sheet1.getNum")

否则,如果它在一个模块中,只需使用模块名称

returnValue = excelOBJ.Run("Module1.getNum")

如果它开始运行此更改,但您没有收到任何返回,您可以更改您的函数以传递 return value parameter ByRef 并以这种方式检查

【讨论】:

  • 谢谢@dbmitch - 我希望有一个简单的解决方案,似乎就是这样。之前,代码位于“VBA 项目 (Variable.xlsm) > Microsoft Excel 对象 > 此工作簿”中。创建模块后(“VBA 项目(Variable.xlsm)> Modules > Module1”),将代码放入模块中,并将“Run”参数更改为“Module1.getNum”,它可以正常运行。返回并显示 Integer 的值 1 和 TypeName。谢谢!
猜你喜欢
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2023-03-18
  • 1970-01-01
  • 2015-09-19
  • 2016-01-10
相关资源
最近更新 更多