Запустите Word Macro в надстройке C # или VBA VSTO - PullRequest
0 голосов
/ 16 апреля 2020

Сегодня у меня есть следующий макрос в Word

Sub comparedocs()
Dim arq1 As String
Dim arq2 As String
Dim itmDocProp As DocumentProperty

For Each prop In ActiveDocument.CustomDocumentProperties
    If prop.Name = "OrPath" Then
        arq1 = prop.Value
    ElseIf prop.Name = "NewPath" Then
        arq2 = prop.Value
    End If
Next

If arq1 = "" Or arq2 = "" Then
    MsgBox "Não encontramos as propiedades necessarias"
    Exit Sub
End If

Set wrd = GetObject(, "Word.Application")

MsgBox arq2
MsgBox arq1

'wrd.Documents.Open arq2
'wrd.Documents.Open arq1

'Application.CompareDocuments OriginalDocument:=Documents(arq1), RevisedDocument:=Documents(arq2), _
'Destination:=wdCompareDestinationOriginal, Granularity:= _
'    wdGranularityWordLevel, CompareFormatting:=False, CompareCaseChanges:= _
'    True, CompareWhitespace:=False, CompareTables:=True, CompareHeaders:=True _
'    , CompareFootnotes:=True, CompareTextboxes:=True, CompareFields:=True, _
'    CompareComments:=True, CompareMoves:=True, RevisedAuthor:="Autor", _
'    IgnoreAllComparisonWarnings:=False
'ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions
' ActiveWindow.ShowSourceDocuments = wdShowSourceDocumentsBoth
End Sub

Мне нужно вставить этот макрос в приложение Word VSTO и запустить его, когда пользователь нажимает кнопку, ниже приведен код, который я пытаюсь запустить, но он работает только тогда, когда макрос уже существует в слове. Я хотел бы вставить макрос вместе с дополнением, так как он будет установлен для нескольких клиентов

 public void OnTableButton(Office.IRibbonControl control)
    {
        RunMacro(Globals.ThisAddIn.Application, new object[] { "comparedocs" });
    }

    private void RunMacro(object oApp, object[] oRunArgs)
    {
        oApp.GetType().InvokeMember("Run",
        System.Reflection.BindingFlags.Default |
        System.Reflection.BindingFlags.InvokeMethod,
        null, oApp, oRunArgs);
    }

1 Ответ

0 голосов
/ 16 апреля 2020

Ваш стартер за 10

public void OnTableButton(Office.IRibbonControl control)
        {
            //RunMacro(Globals.ThisAddIn.Application, new object[] { "comparedocs" });
            comparedocs();
        }
        void comparedocs()
        {
            string arq1 = "";
            string arq2 = "";
            //Microsoft.Office.Core.DocumentProperty ItmDocProp;

            foreach (var prop in Globals.ThisAddIn.Application.ActiveDocument.CustomDocumentProperties)
            {
                if (prop.Name == "OrPath")
                {
                    arq1 = prop.Value;
                }

                else if (prop.Name == "NewPath")
                {
                    arq2 = prop.Value;
                }
            }

            if (arq1 == "" || arq2 == "")
            {
                MessageBox.Show("Não encontramos as propiedades necessarias");
                return;
            }

            var wrd = Globals.ThisAddIn.Application;

            MessageBox.Show(arq2);
            MessageBox.Show(arq1);

            ////wrd.Documents.Open arq2
            //'wrd.Documents.Open arq1

            //'Application.CompareDocuments OriginalDocument:=Documents(arq1), RevisedDocument:=Documents(arq2), _
            //'Destination:=wdCompareDestinationOriginal, Granularity:= _
            //'    wdGranularityWordLevel, CompareFormatting:=False, CompareCaseChanges:= _
            //'    True, CompareWhitespace:=False, CompareTables:=True, CompareHeaders:=True _
            //'    , CompareFootnotes:=True, CompareTextboxes:=True, CompareFields:=True, _
            //'    CompareComments:=True, CompareMoves:=True, RevisedAuthor:="Autor", _
            //'    IgnoreAllComparisonWarnings:=False
            //'ActiveDocument.TrackRevisions = Not ActiveDocument.TrackRevisions
            //' ActiveWindow.ShowSourceDocuments = wdShowSourceDocumentsBoth
        }
...