VBA如何将格式化文本从Excel传递到MS Word

时间:2015-02-28 04:02:11

标签: excel vba excel-vba

我需要在哪里使用VBA比较Excel中的两个文本样本。由于每个文本样本在LEN中超过3000个字符,因此我使用Userform.TextBox字段提取,将它们存储到字符串变量中。

接下来,我使用了我在这里找到的VBA代码' mikerickson ':VBA routine to comp

比较文本。 问题是此代码的输出被输入到Cell:A1。 由于文本样本每个包含超过3000个字符,因此结果不会显示在A1中,因为excel对每个单元格的字符数有限制。

我想知道如何将结果(包括下划线和删除线等所有格式)输入到MS Word文档中。

目前,这是用于输出到单元格A1的代码。

strResult = ComparedText(strOne, strTwo, olStart, olLength, nwStart, nwLength)

With outCell.Cells(1, 1)
    .Clear
    .Value = strResult
    For i = LBound(olStart) To UBound(olStart)
        If olStart(i) <> 0 Then

            With .Characters(olStart(i), olLength(i)).Font
                .ColorIndex = 3
                .StrikeThrough = True
            End With
        End If
    Next i
    For i = LBound(nwStart) To UBound(nwStart)
        If nwStart(i) <> 0 Then
            With .Characters(nwStart(i), nwLength(i)).Font
                .ColorIndex = 4
                .Underline = True
            End With
        End If
    Next i
End With

此处需要替换代码,将 strResult 输入到word文档中,其格式与上述代码中的不匹配完全相同。

希望有人帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这将从Cell A1到Word。如果Cell A1中的数据被截断,那么我们将不得不深入挖掘。

Set wordy = CreateObject("Word.Application")

wordy.Documents.Add
Sheets(1).Range("A1").Copy
wordy.Documents(1).ActiveWindow.Selection.PasteSpecial DataType:=wdPasteRTF
wordy.Visible = True

'wordy.Quit

Set wordy = Nothing

如果我们可以将strResult插入Word并在那里执行格式化,那么这可能对你有用......

Set wordy = CreateObject("Word.Application")

wordy.Documents.Add
wordy.Documents(1).ActiveWindow.Selection.InsertAfter Text:=strResult
wordy.Documents(1).Range.Select
wordy.Visible = True

With wordy.Selection

For i = LBound(olStart) To UBound(olStart)
    If olStart(i) <> 0 Then

        For j = olStart(i) To (olStart(i) + olLength(i) - 1)
            With .Characters(j).Font
                .ColorIndex = 3
                .Strikethrough = True
            End With
        Next j
    End If
Next i

For i = LBound(nwStart) To UBound(nwStart)
    If nwStart(i) <> 0 Then
        For j = nwStart(i) To (nwStart(i) + nwLength(i) - 1)
            With .Characters(j).Font
                .ColorIndex = 4
                .Underline = True
            End With
        Next j
    End If
Next i
End With

Set wordy = Nothing

这可能不是最有效的代码,但希望能让您朝着正确的方向前进。我必须创建 j 循环,因为它看起来像在Word中Characters对象一次只能访问一个字符。