Vba 将注释从Word导出到Excel

Vba 将注释从Word导出到Excel,vba,ms-word,Vba,Ms Word,当我试图在word中运行以下代码以提取注释时,出现了一个错误。黄色突出显示在公共子PrintFirstColumnOnActiveSheetoSheetName()上,它表示我有一个编译错误:未定义变量,并在代码底部突出显示Activesheet.range(“A1”)中的“Activesheet” Option Explicit Public Sub FindWordComments() Dim objExcelApp As Object Dim wb As Object Set obj

当我试图在word中运行以下代码以提取注释时,出现了一个错误。黄色突出显示在公共子PrintFirstColumnOnActiveSheetoSheetName()上,它表示我有一个编译错误:未定义变量,并在代码底部突出显示Activesheet.range(“A1”)中的“Activesheet”

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

也许您应该使用destSheet而不是Activesheet,因为Activesheet没有定义。否则,应在Activesheet前面加上objExcelApp前缀,因此:

objExcelApp.Activesheet

由于您在Word中运行此程序,VBA只“知道”属于Word对象模型的内容,除非代码明确指出源是另一个对象模型。Word对“工作表”一无所知——只有Excel知道什么是
ActiveSheet

即使您向我们展示的代码没有调用使用了
activesheetotsheetname
的过程
printfirstcolumnonactivesheetotsheetname()
,VBA也会在编译代码时看到它。因此,您需要将对Excel应用程序的引用传递到此过程并使用它。例如:

Public Sub PrintFirstColumnOnActiveSheetToSheetName(objExcel as Object)
  objExcel.ActiveSheet.Name = objExcel.ActiveSheet.Range("A1")
End Sub
要在代码中的其他地方调用它,它将类似于下面的一行。请注意,在不同的过程中,同一对象的变量名不需要相同——它们可以相同,但不是必需的。VBA“记住”先前启动的Excel应用程序是传递给另一个过程的

PrintFirstColumnOnActiveSheetToSheetName objExcelApp