Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Excel中的VBA代码和Word之间传递变量_Excel_Vba_Ms Word - Fatal编程技术网

在Excel中的VBA代码和Word之间传递变量

在Excel中的VBA代码和Word之间传递变量,excel,vba,ms-word,Excel,Vba,Ms Word,我有一个Excel VBA sub,它调用一个Word VBA sub来处理一些文件。我需要Word sub向Excel sub报告操作是否成功 我的问题是,本应将Word的成功或失败结果传递回Excel的WResult布尔变量(它被传递给Word宏ByRef)没有这样做,对于Excel它根本不会更改 有解决办法吗?如果可能,我希望避免使用基于剪贴板或将值写入磁盘上文件的解决方案 我的代码在Excel中类似如下: Dim objW As Word.Application Dim objWFile

我有一个Excel VBA sub,它调用一个Word VBA sub来处理一些文件。我需要Word sub向Excel sub报告操作是否成功

我的问题是,本应将Word的成功或失败结果传递回Excel的WResult布尔变量(它被传递给Word宏ByRef)没有这样做,对于Excel它根本不会更改

有解决办法吗?如果可能,我希望避免使用基于剪贴板或将值写入磁盘上文件的解决方案

我的代码在Excel中类似如下:

Dim objW As Word.Application
Dim objWFile As Word.Document
Dim my_FileNamePath As String
Public WResult As Boolean

Sub Main()
    Set objW = CreateObject("Word.Application")
    Set objWFile = objW.Documents.Open("C:\WordMacro.docm")

    'Run Word macro
    objW.Run "Manip_Text", my_FileNamePath, WResult
    If WResult Then
        Macro_Continue
    Else
        Err_Handling
    End If
End Sub
。。。总之:


Public Sub Manip_Text(my_FileNamePath As String, ByRef WResult As Boolean)

On Error GoTo IfError

'Word macro code here

WResult = True   'Set result to True if there were no errors and exit sub back to Excel
Exit Sub

IfError:
MsgBox "There was an error with the Word file"
WResult = False   'Set result to False and exit back to Excel

End Sub

将Word中的Sub更改为返回布尔值的函数

Run方法返回被调用宏返回的任何内容

单词功能:

Public Function ReturnMethod(ByVal stringText As String) As Boolean
    MsgBox stringText

    ReturnMethod = True
End Function
Excel方法调用Word中的函数:

Sub TestReturnMethod()

    Dim a As String: a = "Hello there!"

    Dim objW As Object
    Dim objWFile As Object

    Set objW = CreateObject("Word.Application")
    Set objWFile = objW.Documents.Open("E:\SomeFolder\Test.docm")

    Dim returnValue As Boolean
    returnValue = objW.Run("ReturnMethod", a)

    MsgBox returnValue
End Sub

将Word中的Sub更改为返回布尔值的函数

Run方法返回被调用宏返回的任何内容

单词功能:

Public Function ReturnMethod(ByVal stringText As String) As Boolean
    MsgBox stringText

    ReturnMethod = True
End Function
Excel方法调用Word中的函数:

Sub TestReturnMethod()

    Dim a As String: a = "Hello there!"

    Dim objW As Object
    Dim objWFile As Object

    Set objW = CreateObject("Word.Application")
    Set objWFile = objW.Documents.Open("E:\SomeFolder\Test.docm")

    Dim returnValue As Boolean
    returnValue = objW.Run("ReturnMethod", a)

    MsgBox returnValue
End Sub

我想你不能从word返回任何excel。。。我的解决方法是使用word app创建一个txt文件,并将其称为成功或失败,这样excel就可以查找该文件并知道是哪个文件。您可以使用数据库从中读写。它不像听起来那么复杂,而且非常可靠。我认为你不能从word返回任何优秀的东西。。。我的解决方法是使用word app创建一个txt文件,并将其称为成功或失败,这样excel就可以查找该文件并知道是哪个文件。您可以使用数据库从中读写。它不像听起来那么复杂,而且非常可靠。