I have an .xlsm workbook where this VBA (see below) interacts with a Word Document to replace field codes. Seems straight forward, and it worked great...
Then I copied and pasted the code into a new .xlsm, checked the cells, sheet names, and contents, all is the same! The VBA will run, and I get no errors. However, with the new .xlsm, the field codes will no longer be replaced in the document! I have not found anything online which is helpful... Thoughts?
as a side note, I'm not sure if this is related or not, but my "num lock" turns on/off at times during testing this script/function.
Sub Exl_to_Wrd_FieldReplace()
'
' Exl_to_Wrd_FieldReplaceMacro
'
' Setup info for document and captures default DIR for Document
Dim wordapp As Object
Dim folderPath As String
Dim wordDoc As String
folderPath = Application.ThisWorkbook.Path
wordDoc = folderPath & "\TestDoc.docx"
'
' Assign Excel cell values for Field Code Text Replacement
Dim CaseNum As String: CaseNum = Range("C36").Value
Dim P1LastName As String: P1LastName = Range("C41").Value
Dim P2FInl As String: P2FInl = Range("C53").Value
Dim P2LastName As String: P2LastName = Range("C54").Value
Dim P2ID As String: P2ID = Range("C55").Value
'
' Open Word application and document
Set wordapp = CreateObject("word.Application")
wordapp.Documents.Open (wordDoc) 'Uses path from above & Doc name
wordapp.Visible = True
wordapp.Activate
'
' Converts Field Vaule text to Field Codes (i.e. ALT + F9)
SendKeys "%{F9}"
'
' Starts the Find Command to replace field code with hard coded text
With wordapp.ActiveDocument.Content.Find
'
' Finds 1st field code
.Text = "^d DOCPROPERTY IBA|CaseNumber \* MERGEFORMAT"
.ClearFormatting
.Replacement.Text = CaseNum
.Execute Replace:=wdReplaceAll
' Finds 2nd field code
.Text = "^d DOCPROPERTY IBA|P1LastName \* MERGEFORMAT"
.ClearFormatting
.Replacement.Text = P1LastName
.Execute Replace:=wdReplaceAll
' Finds 3rd field code
.Text = "^d DOCPROPERTY IBA|P2FirstInitial \* MERGEFORMAT"
.ClearFormatting
.Replacement.Text = P2FInl
.Execute Replace:=wdReplaceAll
' Finds 4th field code
.Text = "^d DOCPROPERTY IBA|P2LastName \* MERGEFORMAT"
.ClearFormatting
.Replacement.Text = P2LastName
.Execute Replace:=wdReplaceAll
' Finds 5th field code
.Text = "^d DOCPROPERTY IBA|P2Number \* MERGEFORMAT"
.ClearFormatting
.Replacement.Text = P2ID
.Execute Replace:=wdReplaceAll
'
End With
'
' Converts Field Codes back to Field Vaule text (i.e. ALT + F9)
SendKeys "%{F9}"
'
' It is ok to leave doc open, user needs to do final check/edit before save
'
End Sub
I checked both excel sheets, links, VBA and Xml, all is the same.
Using SendKeys usually is highly unreliable. To toggle the display of fields in word, you can use
ShowFieldCodes, which is a Property of aView-object, and that is a property of aWindow.