グレッグ・マクシー(WordのVBA MVP)には便利かもしれないいくつかのヒントがあります。
http://gregmaxey.com/word_tip_pages/find_replace_long_string.html
は、あなたがOn Error Resume Next
でこれを無視しなければなりません(この行を取り除くと、あなたは以下のようなエラーが表示されます)ので、Replacement.Text
に255文字の制限があります。
彼の提案限り、あなただけ(例えば、.Copy
範囲または選択する)、しかしからWord文書の間、またはWord文書内のものをやっていると正常に動作クリップボードを活用することです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
@Bugs VBAが長い文字列を切り捨てる場合があります。 –
このコードにはあなたが表示していないものがありますか?そのままでは、Excelでは実行されず、最初の行With With Selection.Find(引数の数が間違っています)で失敗します。 –
このコードを正しく実行するように調整しても、実行時エラー5854が発生するはずです。http://imgur.com/RzExsXK実際のエラーをマスクするか無視するには、「On Error Resume Next」や他の愚かさを使用していますか? –