我当前正在尝试将多行字符串从Excel传递到Word文档。我首先使用单元格数据创建字符串,然后尝试通过搜索和替换的方法将其传递给Word。代码是在Word中找到单词(在何处替换),但是它是用空字符串替换它。几件事;首先,我Debug.Print
发生替换时的字符串,并且该字符串在立即窗口中已满。其次,当我用一个简单的字符串替换单词时,它也可以很好地替换,这使我相信,我首先尝试发送给Word的多行字符串似乎存在问题。以下是我的代码以及其他可能相关的内容。
下面是For Each
循环,它循环遍历每个工作表并为该工作表创建相关的字符串。 randNo
代表随机行号(因为字符串将包含随机数据)。但这与问题无关。
'open the word file
Set objWord = CreateObject("Word.Application")
objWord.Documents.Open strPath & fileOpen, ReadOnly:=False
objWord.Visible = True
For Each ws In Worksheets
lRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
'check if enough rows
If lRow < 11 Then
myLimit = (lRow - 1)
Else
myLimit = 10
End If
'cycle through and concatenate string
For i = 1 To myLimit
randNo = Int((lRow - 2 + 1) * Rnd + 2)
dateStr = ws.Range("A" & randNo).Text
timeStr = ws.Range("B" & randNo).Text
conditionString = conditionString & vbNewLine & dateStr & " " & timeStr & " " & GetAllConditions(dateStr, timeStr)
Next i
'activate word - ready for search and replace
objWord.Activate
textToFind = "RS" & myCntr
finalStr = textToFind & conditionString
With objWord.ActiveDocument.Content.Find
.Text = textToFind
.Replacement.Text = finalStr
Debug.Print finalStr
.Execute Replace:=wdReplaceAll
End With
ThisWorkbook.Activate
myCntr = myCntr + 1
conditionString = ""
Next ws
以下是finalStr
从VBE的“立即”窗口打印出来的示例:
RS7
25/09/2018 08:00:00 C2, C5, C6, C7, C8, C9, C10,
06/08/2018 08:00:00 C4, C6, C7,
25/01/2019 14:30:00 C1, C2, C5, C6, C7, C8, C11,
05/11/2018 08:00:00 C6, C7,
31/12/2018 20:30:00 C1, C2, C6, C7, C8, C10, C11,
30/11/2018 08:00:00 C2, C6, C7, C8,
25/09/2018 08:00:00 C2, C5, C6, C7, C8, C9, C10,
11/02/2019 14:30:00 C1, C4, C6, C7, C8,
01/10/2018 14:30:00 C1, C2, C5, C6, C7, C8, C9, C11,
11/09/2018 14:30:00 C1, C2, C3, C4, C6, C7, C8, C9, C10, C11,
同样,它会很好地发现textToFind
变量,但只是将其替换为空字符串而不是所需的字符串(上面的字符串)。
我不确定这是什么原因,或者我缺少或不清楚的原因(因为我在这里必须是个假人!),所以将不胜感激!
谢谢