cjmitton
08-10-2018, 01:30 AM
In a previous post about opening a word document and putting it in to a text box to 'preview' the content I came across a function on Ryan McCormick website (https://rtmccormick.com/2015/11/23/ms-word-document-text-to-string-with-vba/) I've started to tweak this for my own requirements.
Function getPreviewWordDocText(iFile) As String
Dim oWord As Object
Dim oWdoc As Object
Dim docContent As String
Dim numChar As Long
' Initialize Word Objects
On Error GoTo Errhandler
Set oWord = CreateObject("Word.Application")
Set oWdoc = oWord.Documents.Open(iFile)
' Count number of characters in document
numChar = oWdoc.Characters.Count
' If greater than 750 then select first 750 to preview.
If numChar >= 750 Then
docContent = oWdoc.Range(0, 750)
Else
' If less than 750 select all characters to preview
docContent = oWdoc.Content
End If
' Return Document Content
getPreviewWordDocText = docContent
' Completed go to clean up
GoTo ExitMacro
Errhandler:
Select Case Err
Case 4608:
ErrMsg = "There is an error with the file you are previewing" & _
"Press OK to continue"
Result = MsgBox(ErrMsg, vbOKOnly)
GoTo ExitMacro
Case Else:
MsgBox "Error in preview macro # " & Err & " : " & Error(Err)
GoTo ExitMacro
End Select
ExitMacro:
' Clear Memory
oWdoc.Close
oWord.Quit
Set oWdoc = Nothing
Set oWord = Nothing
End Function
I've added in a character count a if there's less than the selected number of characters it crashes (hence the added error handler) so added the if statement to sort that issue.
My main issue is now sometimes when opening the word document to count / read the text it waits in the background for a open read only / close / etc box if the word document is either open already or has not closed down correctly and someone still has it 'open'.
I've tried to play with opening it read only (as that all I need anyway) but not had any luck, should I be checking first to see if its open or can I just force open read only? Or should I be doing something completely different?
Function getPreviewWordDocText(iFile) As String
Dim oWord As Object
Dim oWdoc As Object
Dim docContent As String
Dim numChar As Long
' Initialize Word Objects
On Error GoTo Errhandler
Set oWord = CreateObject("Word.Application")
Set oWdoc = oWord.Documents.Open(iFile)
' Count number of characters in document
numChar = oWdoc.Characters.Count
' If greater than 750 then select first 750 to preview.
If numChar >= 750 Then
docContent = oWdoc.Range(0, 750)
Else
' If less than 750 select all characters to preview
docContent = oWdoc.Content
End If
' Return Document Content
getPreviewWordDocText = docContent
' Completed go to clean up
GoTo ExitMacro
Errhandler:
Select Case Err
Case 4608:
ErrMsg = "There is an error with the file you are previewing" & _
"Press OK to continue"
Result = MsgBox(ErrMsg, vbOKOnly)
GoTo ExitMacro
Case Else:
MsgBox "Error in preview macro # " & Err & " : " & Error(Err)
GoTo ExitMacro
End Select
ExitMacro:
' Clear Memory
oWdoc.Close
oWord.Quit
Set oWdoc = Nothing
Set oWord = Nothing
End Function
I've added in a character count a if there's less than the selected number of characters it crashes (hence the added error handler) so added the if statement to sort that issue.
My main issue is now sometimes when opening the word document to count / read the text it waits in the background for a open read only / close / etc box if the word document is either open already or has not closed down correctly and someone still has it 'open'.
I've tried to play with opening it read only (as that all I need anyway) but not had any luck, should I be checking first to see if its open or can I just force open read only? Or should I be doing something completely different?