Reputation: 29
I have about 10 Word documents labeled (1,2,3 etc.). I have a requirement to count the number of words and the number of misspelled words in each document and output this count to Excel.
How do I write a VBA script for this?
In word I know how to find out the word count and the number of misspelled words and display that as a Msgbox, but I'm not sure how to make excel read through word documents and display the output.
Ideally, the excel file will to ask me to select all the word documents, and then produce a sheet that has:
Doc Name Word_count Misspelled_count
1 30 9
2 45 8
3 50 15
.
.
My VBA code in Word to display error and word count is:
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
EDIT:
I tried my hand at this and this is what I came up with ..
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
What am I doing wrong???
Upvotes: 0
Views: 3481
Reputation: 53663
Should be pretty easy. Modify as needed.
You need your Excel to open (and then control) Word. This is called "binding". The example below will bind Word to 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
Upvotes: 4