【问题标题】:Count words in a document and output to excel计算文档中的单词并输出到excel
【发布时间】:2015-03-07 03:46:20
【问题描述】:

我有大约 10 个标记为(1、2、3 等)的 Word 文档。我需要计算每个文档中的单词数和拼写错误的单词数,并将此计数输出到 Excel。

如何为此编写 VBA 脚本?

在 word 中,我知道如何找出字数和拼写错误的单词数并将其显示为 Msgbox,但我不确定如何让 Excel 读取 Word 文档并显示输出。

理想情况下,excel文件会要求我选择所有的word文档,然后生成一个表格,其中包含:

Doc Name   Word_count   Misspelled_count
1              30            9
2              45            8
3              50            15
.
.

我在 Word 中显示错误和字数的 VBA 代码是:

Sub get_wpm_errorcount()
Dim ThisDoc As Document
Dim ErrorCnt As Integer
Dim WordCnt As Integer

Set ThisDoc = ActiveDocument

WordCnt = ThisDoc.Range.ComputeStatistics(wdStatisticWords)
ErrorCnt = ThisDoc.SpellingErrors.Count
MsgBox ("WPM = " & WordCnt & "   Error Count = " & ErrorCnt)

End Sub

编辑:
我试过了,这就是我想出的..

Dim RunErrorCount As Integer    'Global running total of errors
Dim FilesToOpen                 'Global list of files to open
Dim FileCount As Integer        'Global count of files to open

Private Sub ReadtextFile()

Dim x As Integer
Dim wkbAll As Workbook
Dim wkbTemp As Workbook

On Error GoTo ErrHandler
Application.ScreenUpdating = False

FilesToOpen = Application.GetOpenFilename _
    (FileFilter:="All Files (*.*),*.*", _
    MultiSelect:=True, Title:="Text Files to Open")

If TypeName(FilesToOpen) = "Boolean" Then
    MsgBox "No Files were selected"
    GoTo ExitHandler
End If

x = 1

Set wkbTemp = Workbooks.Open(Filename:=FilesToOpen(x))

Call get_wpm_errorcount

Range("A1").Offset(FileCount + 1, 0).Select
Selection.NumberFormat = "0.00"
ActiveCell.Value = FilesToOpen(x).Name  'Output filename

Range("B1").Offset(FileCount + 1, i).Select
Selection.NumberFormat = "0.00"
ActiveCell.Value = WordCount  'Output total count

Range("C1").Offset(FileCount + 1, i).Select
Selection.NumberFormat = "0.00"
ActiveCell.Value = ErrorCount  'Output total count

x = x + 1

FileCount = UBound(FilesToOpen)

End Sub

Sub get_wpm_errorcount(ThisDoc As Object)
Dim ErrorCnt As Integer
Dim WordCnt As Integer

WordCnt = ThisDoc.Range.ComputeStatistics(wdStatisticWords)
ErrorCnt = ThisDoc.SpellingErrors.Count

End Sub

我做错了什么???

【问题讨论】:

    标签: vba excel ms-word


    【解决方案1】:

    应该很容易。根据需要进行修改。

    您需要 Excel 才能打开(然后控制)Word。这称为“绑定”。下面的示例将 Word 绑定到 Excel:

    Option Explicit
    'NOTE: REQUIRES REFERENCE TO MS WORD
    Sub main()
    Dim wordApp as Word.Application
    Dim wordDoc as Word.Document
    Dim fd As FileDialog
    Dim listFiles As Variant
    Dim i As Long
    
    'Display the file dialog to allow the user to select file(s)
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
        fd.AllowMultiSelect = True
        fd.ButtonName = "Select Files to Process"
        fd.Show
    
    'Create Word Application only if needed:
    If fd.SelectedItems.Count > 0 Then Set wordApp = CreateObject("Word.Application")
    
    'Then iterate th selected items and open them in Word:
    For i = 1 to fd.SelectedItems.Count
    
        Set wordDoc = wordApp.Documents.Open(fd.SelectedItems(i))  
    
    
        'Send the document object AND the integer i to the other function
        ' which will read the document and print results to Excel spreadsheet
        Call get_wpm_errorcount(wordDoc, i)
    
        wordDoc.Close
    Next
    
    Set wordApp = Nothing
    
    
    End Sub
    
    Sub get_wpm_errorcount(ThisDoc As Object, itemNumber as Integer)
    Dim ErrorCnt As Integer
    Dim WordCnt As Integer
    
    WordCnt = ThisDoc.Range.ComputeStatistics(wdStatisticWords)
    ErrorCnt = ThisDoc.SpellingErrors.Count
    
    Range("A1").Offset(itemNumber, 0).Value = WordCnt
    Range("B1").Offset(itemNumber, 0).Value = ErrorCnt
    
    End Sub
    

    【讨论】:

    • 感谢您的帮助。我试着装订。我对 VBA 非常陌生,所以我仍然无法弄清楚这一点。同样,我希望 Excel 读取一堆 Word 文件。不只是一个特定的。然后我想在 Excel 中输出 ..
    • 查看处理多个文件的版本。您将需要修改过程 get_wpm_errorCount 以将输出写入 Excel 工作表,而不是显示在 MessageBox 中。
    • 你也可以使用CreateObject("Word.Application")而不设置对word的引用。
    • @SO 是的,你可以。但是你不能Dim wordApp as Word.Application 没有参考:) 早期绑定通常对初学者来说更容易,尤其是因为智能感知。
    • @david-zemens 要打印到 excel,我是否将 i 声明为全局变量,然后将其添加到 get_wpm_errorCount (Range("A1").Offset(i, 0).Value = WordCnt Range("B1").Offset(i, 0).Value = ErrorCnt)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多