字符串太长,将数据从Excel复制到Word文档中

时间:2017-05-02 15:47:13

标签: vba excel-vba ms-word word-vba excel

我正在尝试使用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

2 个答案:

答案 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忽略此限制(摆脱此行,您将看到如下所示的错误)

enter image description here

他的建议是利用剪贴板,只要你只在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