VBA回车

时间:2018-02-22 13:47:42

标签: excel vba excel-vba line-breaks carriage-return

这里是新的,一般来说是VBA。我创建了一个宏,它复制excel中单元格的内容并粘贴到word文档中的特定位置。仅供参考,我在单词中使用书签来选择粘贴的确切位置。问题是复制的所有内容都会插入一行和/或段落/回车符。我找到了很多可能的解决方案,但是由于我在VBA方面缺乏经验,所以没有一个能够解决问题。请帮忙!

Sub OpenWord()

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim R1 As Object
    Dim R2 As Object

    Set WordApp = CreateObject("Word.Application")
    Set WordDoc = WordApp.Documents.Open(Filename:="C:\Users\KG\Desktop\VBA WIP\FAfile.docx")
    Set R1 = WordDoc.Bookmarks("b1")
    Set R2 = WordDoc.Bookmarks("b2")

        WordApp.Visible = True
        WordApp.Activate

            Sheets("Details INPUT").Range("H4").copy
            R1.Select
            WordApp.Selection.PasteAndFormat Type:=wdFormatSurroundingFormattingWithEmphasis
            Application.CutCopyMode = True

            Sheets("Details INPUT").Range("H7").copy
            R2.Select
            WordApp.Selection.PasteAndFormat Type:=wdFormatSurroundingFormattingWithEmphasis
            Application.CutCopyMode = True


    Set WordDoc = Nothing
    Set WordApp = Nothing
    Set R1 = Nothing
    Set R2 = Nothing
End Sub

2 个答案:

答案 0 :(得分:2)

请尝试以下方法。对于Excel,在使用Word的对象模型时,最好使用底层对象,而不是选择。除非你绝对需要,否则最好避免使用剪贴板。 Word还有一个Range对象,这是一个有用的"目标"。

请注意,此方法将丢失Excel工作表中的任何格式。

如果您想使用问题中的代码来实现格式化,那么您将同时引入工作表结构:您将粘贴表格单元格。这可能是您认为的新行/段落。我包含的变体(请参阅三个'')只是字体格式,没有Excel结构(相当于UI中的PasteSpecial作为RTF)。

Sub OpenWord()

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim R1 As Object
    Dim R2 As Object

    Set WordApp = CreateObject("Word.Application")
    Set WordDoc = WordApp.Documents.Open(Filename:="C:\Users\KG\Desktop\VBA WIP\FAfile.docx")
    Set R1 = WordDoc.Bookmarks("b1").Range
    Set R2 = WordDoc.Bookmarks("b2").Range

        WordApp.Visible = True
        'Put it at the end, before "clean up" if you want to do this
        'WordApp.Activate

    R1.Text = Sheets("Details INPUT").Range("H4").Text
    R2.Text = Sheets("Details INPUT").Range("H7").Text

    '''Sheets("Details INPUT").Range("H7").copy
    '''R2.PasteExcelTable False, False, True
    'CutCopyMode is NOT boolean, pass it either 1 or 0 or the xl-constant value!
    '''Application.CutCopyMode = xlCopy

    Set R1 = Nothing
    Set R2 = Nothing
    Set WordDoc = Nothing
    Set WordApp = Nothing
End Sub

答案 1 :(得分:1)

这里有多个问题。

首先,由于您使用的是后期绑定CreateObject("Word.Application"),因此您可能没有包含对Microsoft Word ... Object Library的引用。但是常量wdFormatSurroundingFormattingWithEmphasis将不会被设置为0.使用后期绑定不能使用常量名称。必须使用适当的值。

使用Selection.PasteAndFormat您粘贴整个表格单元格而不是仅粘贴值。根据您的描述,您只想粘贴价值。

要粘贴该值,请尝试Selection.PasteSpecial

...
            Sheets("Details INPUT").Range("H4").Copy
            R1.Select
            'WordApp.Selection.PasteAndFormat Type:= 20
            WordApp.Selection.PasteSpecial DataType:=2
            Application.CutCopyMode = False

            Sheets("Details INPUT").Range("H7").Copy
            R2.Select
            'WordApp.Selection.PasteAndFormat Type:= 20
            WordApp.Selection.PasteSpecial DataType:=2
            Application.CutCopyMode = False
...

2是wdPasteText的值。

如果Excel中需要格式化内容,请改用wdPasteRTF,而不是2。