这里是新的,一般来说是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
答案 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。