我正在尝试使用Excel单元格中的字符串替换文本文档中的占位符。
对于小于255个字符的字符串,它可以正常工作,但当它们更大时,则不能。
代码:
Sub Sheet003ADes()
'Sheet 3A- Multi-Family Housing -----------------------------
With Selection.Find
.ClearFormatting
.Text = "[[3A DESCRIPTION]]"
.Replacement.ClearFormatting
.Replacement.Text = Worksheets("3A- Multi-Family Housing").Range("A4").Value 'Insert 3A Activity Description
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub
答案 0 :(得分:2)
Greg Maxey(Word VBA MVP)提供了一些您可能会觉得有用的提示。
http://gregmaxey.com/word_tip_pages/find_replace_long_string.html
Replacement.Text
限制为255个字符,因此您必须使用On Error Resume Next
忽略此限制(摆脱此行,您将看到如下所示的错误)
他的建议是利用剪贴板,只要你只在Word文档之间或在Word文档中(例如,到.Copy
范围或选择),但从像Excel这样的其他应用程序,我认为您可能需要使用MsForms.DataObject
作为中介将文本放入剪贴板,然后才能使用他概述的技巧。
类似的东西:
Const wdReplaceAll As Long = 2
Const wdFindContinue As Long = 1
Dim longString As String
Dim wd As Object, doc As Object, sel As Object
Dim dataObj As New DataObject '## Requires reference to MSForms
'## Alternatively:
' Dim dataObj as Object
' Set dataObj = CreateObject("MSForms.DataObject")
Set wd = GetObject(, "Word.Application")
Set doc = wd.ActiveDocument
longString = Worksheets("3A- Multi-Family Housing").Range("A4").value
dataObj.SetText longString
dataObj.PutInClipboard
Set sel = doc.Range
sel.Select
With doc.Range.Find
.ClearFormatting
.Text = "[[3A Description]]"
.Replacement.ClearFormatting
.Replacement.Text = "^c"
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
答案 1 :(得分:1)
感谢使用剪贴板诀窍。
这是当前的工作版本。
45467