从VBA运行代码到VBScript返回到VBA

我试图找出一种方法来在Excel使用vba调用VBScript函数,然后将值传回给excel-vba 。 见下文

Excel中的VBA

  Sub RunTest() Dim objString as String 'Begin Pseudocode objString = Call VBScript Function Test() 'End Pseudocode MsgBox objString `from VBS End Sub 

VBScript

  Function Test Test = "Hello World" End Function 

我知道这可能看起来很奇怪,因为我可以在VBA中编写这个函数,但是我们有一个办公室补丁被推出,由于某种原因,它完全丧失了我的一个macros的function。 奇怪的是,我可以在任何其他办公室程序中运行完全相同的代码,只是不是很好。 作为一个解决办法,我将excel崩溃的函数移动到了word中,并使用application.run将其拉出,但是我更喜欢不必这样做,因为打开一个单词应用程序来运行我的macros会减慢我的处理速度。

任何帮助表示赞赏,谢谢

好吧,我觉得一点点肮脏:)

这个代码有两个关键部分:

  • vbs使用GetObject和完整的主机工作簿path重新附加到包含调用VBSVBA的文件
  • VBS向主VBA文件中的特定工作表添加一个值,以触发Worksheet_Change事件触发,使用从VBS传递的string运行VBA

第1步:常规Excel代码模块

 Sub VBA_to_VBS_to_VBA() Shell "wscript c:\temp\myvbs.vbs", vbNormalFocus End Sub 

第2步: myvbs

 Dim xlApp Dim xlSht On Error Resume Next Set xlApp = GetObject("c:\temp\mybook.xlsx").Application Set xlSht = xlApp.Sheets("vbs sheet") On Error GoTo 0 If Not xlSht Is Nothing Then xlSht.Range("A1").Value = "hello world" Else wscript.echo "sheet not found" End If 

步骤3:Excel文件中的vbs表单的表单代码

 Private Sub Worksheet_Change(ByVal Target As Range) MsgBox [a1].Value, vbCritical, "VBS insertion" End Sub 

尝试如下语法:

 Sub Test() Shell "cscript c:\TestFolder\sample.vbs", vbNormalFocus End Sub