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