从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重新附加到包含调用VBS
的VBA
的文件 -
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