Экспорт комментариев из Word в Excel - PullRequest
0 голосов
/ 05 июня 2019

Я получаю сообщение об ошибке при попытке запустить следующий код в слове для извлечения комментариев.Желтое выделение находится над Public Sub PrintFirstColumnOnActiveSheetToSheetName (), которое затем говорит, что у меня есть ошибка компиляции: переменная не определена и выделяет «Activesheet» в Activesheet.range («A1») в нижней части кода

Option Explicit

Public Sub FindWordComments()


Dim objExcelApp As Object
Dim wb As Object
Set objExcelApp = CreateObject("Excel.Application")
Set wb = objExcelApp.Workbooks.Open("C:\Desktop\Book11")

Dim myWord              As Word.Application
Dim myDoc               As Word.Document
Dim thisComment         As Word.Comment

Dim fDialog             As Office.FileDialog
Dim varFile             As Variant

Dim destSheet           As Worksheet
Dim rowToUse            As Integer
Dim colToUse            As Long

Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
Set destSheet = wb.Sheets("Book11")
colToUse = 1

With fDialog
    .AllowMultiSelect = True
    .Title = "Import Files"
    .Filters.Clear
    .Filters.Add "Word Documents", "*.docx"
    .Filters.Add "Word Macro Documents", "*.docm"
    .Filters.Add "All Files", "*.*"
End With

If fDialog.Show Then

    For Each varFile In fDialog.SelectedItems

        rowToUse = 2

    Set myWord = New Word.Application
    Set myDoc = myWord.Documents.Open(varFile)

    For Each thisComment In myDoc.Comments

        With thisComment
            destSheet.Cells(rowToUse, colToUse).Value = .Range.Text
            destSheet.Cells(rowToUse, colToUse + 1).Value = .Scope.Text
            destSheet.Columns(2).AutoFit
        End With

        rowToUse = rowToUse + 1

    Next thisComment

    destSheet.Cells(1, colToUse).Value = Left(myDoc.Name, 4)
    'Put name of interview object in cell A1

    destSheet.Cells(1, colToUse + 1).Value = ActiveDocument.Words.Count
    'Put the number of words in cell B1

    Set myDoc = Nothing
    myWord.Quit

    colToUse = colToUse + 2

Next varFile

End If

End Sub


Public Sub PrintFirstColumnOnActiveSheetToSheetName()


ActiveSheet.Name = ActiveSheet.Range("A1")


End Sub

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Возможно, вам следует использовать destSheet, а не Activesheet, так как Activesheet не определен. В противном случае вам следует добавить префикс ActiveSheet к objExcelApp, например:

objExcelApp.Activesheet
0 голосов
/ 10 июня 2019

Поскольку вы запускаете это в Word, VBA только «знает» вещи, которые принадлежат объектной модели Word , если только в коде не указано, что другая объектная модель является источником.Word ничего не знает о «Sheets» - только Excel знает, что такое ActiveSheet.

Даже если код, который вы нам показываете, не вызывает процедуру PrintFirstColumnOnActiveSheetToSheetName(), где используется ActiveSheet, VBA видит , когда компилирует код.Поэтому вам нужно передать ссылку на приложение Excel в эту процедуру и использовать ее.Например:

Public Sub PrintFirstColumnOnActiveSheetToSheetName(objExcel as Object)
  objExcel.ActiveSheet.Name = objExcel.ActiveSheet.Range("A1")
End Sub

Для вызова этого в другом месте вашего кода это будет выглядеть примерно так:Обратите внимание, что имена переменных для одного и того же объекта не обязательно должны быть одинаковыми в разных процедурах - они могут быть, но это не обязательно.VBA «помнит», что приложение Excel, запущенное ранее, было передано другой процедуре.

PrintFirstColumnOnActiveSheetToSheetName objExcelApp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...