当前位置: 首页 > 知识库问答 >
问题:

使用vba将word文档的内容复制到另一个word文档中

雷硕
2023-03-14

我已经很多年没有使用VB了,所以如果这是显而易见的,请原谅我。我正在尝试编写一个word vba宏,以便在模板中使用,该模板将显示一个userform,然后导入fileA的内容。docx,fileB。docx或fileC。docx取决于用户表单。(之后我将使用书签填写一些表单数据,我不知道这是否相关)。文件A、B和C将包含一些基本格式(如列表)的文本,但没有什么特别之处。

我在网上看到的解决方案可以将文件内容复制到一个新文件中,但理想情况下,我希望将其中一个文件的全部导入到从模板中获取的当前未命名的新文件中。我想我遇到的问题是将选择切换到这些文件中的一个,然后返回到新的未命名文档,尽管我可以用手确保复制正确。

更新:我让事情变得太难了,尽管这里的答案让我指向了正确的方向(谢谢!)。最后我就这么做了

ThisDocument.Activate

Selection.InsertFile("fileA")

这给了我想要的一切。

共有3个答案

元修然
2023-03-14

录制宏。。。

  1. 从源文档开始
  2. 按ctrl-a选择所有内容
  3. 按ctrl-c将其复制到剪贴板
  4. 切换到目标文档
  5. 按ctrl-v键粘贴到文档中
  6. 停止录音

或(假设word 2007或更高版本)

  1. 从目标文档开始,关闭源文档
  2. 在功能区上单击“插入”

我更喜欢第二个版本,所以我应该把它放在第一位

松旻
2023-03-14

这里有一个显著的改进(我认为),你会想要合并,因为它:

  1. 不使用剪贴板,因此不会使宏易受用户在宏运行时更改剪贴板内容的攻击
  2. 不使用文件,因此通过消除I/O大大提高了速度,并消除了必须处理文件系统安全/权限等问题的可能性。请不要使用。InsertFile()如果在文档中循环,则会降低速度。在最后使用一次——只有在你必须的时候。下面的示例显示了如何在不使用的情况下实现相同的结果。InsertFile()

其思想是将在一个源文档中找到的部分文本传输到与源文档不同的目标文档,并保留源文档的格式。

要完成上述操作(跳过打开文档的代码):

For Each oTable In oDoc_Source  
'the above could have been anything that returns a Range object
'such as: ActiveDocument.Content.Find.Execute ....

'...
'logic here to identify the table, or text, you are looking for
'...

'I can't believe the MS Dev Center folks could only think
'of .InsertFile(), which is the last resort I would go for, 
'especially if your code runs on a web server [concurrent web requests]!

'SAFEST
'(no user interference on clipboard possible, no need to deal with file i/o and permissions)
'you need a reference to Document.Content, 
'as the act of obtaining a reference "un-collapses" the range, so the below 3 lines must be in that order.
Set oRange =  oDoc_DestinationDoc.Content
oRange.Collapse Direction:=wdCollapseEnd
oRange.FormattedText = oTable.Range

'BRUTE, AND PRONE TO RANDOM ERRORS AND HANGS DUE TO USER INTERFERENCE WITH CLIPBOARD 
'find a way to implement WIHTOUT using the CLIPBOARD altogether to copy the below range object
'it will be easier for PC users to use the clipboard while the macro runs
'and it will probably be safer for the output of this macro to remain uncorrupted

'oTable.Range.Copy
'Set oRange =  oDoc_DestinationDoc.Content
'oRange.Collapse Direction:=wdCollapseEnd
'oRange.Paste


'THE BELOW DOES NOT WORK
' '1) - cannot add a range from another document
' 'adds only text, not the formats and not the table layout
' oTable.Range.TextRetrievalMode.IncludeFieldCodes = True
' oTable.Range.TextRetrievalMode.IncludeHiddenText = True
'  oDoc_DestinationDoc.Content.InsertAfter oTable.Range
'
' '2) - cannot add a range from another document
'  oDoc_DestinationDoc.Content.Tables.Add oTable.Range, iRowMax, iColMax
' 
' '3) - only puts in plain text, and it replaces the range without the .Collapse call
'  oDoc_DestinationDoc.Content.Text = oTable.Range
万浩淼
2023-03-14

使用这样的命令,您可以在使用的文档和复制粘贴元素之间进行切换:

ThisDocument.Activate 'Sets the main document active
Documents("Name.doc").Activate 'Activates another document

您可以使用复制命令在文档中插入、复制和粘贴内容。

ThisDocument.Range.InsertAfter("String") 'Insert text

Selection.WholeStory 'Select whole document
Selection.Expand wdParagraph 'Expands your selection to current paragraph
Selection.Copy 'Copy your selection
Documents("name.doc").Activate 'Activate the other document
Selection.EndKey wdStory 'Move to end of document
Selection.PasteAndFormat wdPasteDefault 'Pastes in the content

然后,您可以对这些文件进行格式化,或者使用以前的原始格式进行复制和粘贴。

 类似资料:
  • 我想用vba来保护我的word文档。 的确,这是可能的,但我已经通过以下链接搜索了如何取消文档保护: http://www.aurelp.com/2015/04/01/how-to-unlock-a-microsoft-word-document-step-by-stepsolved/ 有没有其他方法可以成功地保护文档不被未经授权的用户使用?

  • 我有一个当前格式的文档 标题 字幕 H1 样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本 H2 样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本样本文本 H3 样本文本样本文本样本文本样本文本样本文

  • 我有一个word文档,其中包含许多由html标记定义的html文档。我想创建一个数组或范围集合,每个范围由一个html文档组成。例如,以下是Word文档: 等等。我想用一系列范围来填充rngHTMLDocs()As Range,每个范围包含每个打开和关闭html标记中的文本。 我创建了以下代码,试图遍历定义这些范围的整个文档,但它只继续选择超文本标记语言Doc 1。我想我可能以错误的方式接近整个迭

  • 我想编写一个通用方法,通过循环段落和形状来提取从word文档到文本文件的所有内容。 我能够使用下面的代码解析90%的文档。但是,此代码不会读取少数表中的内容。 我无法从MS word文档中提取表格中的少量文本。这个问题只涉及一些文本和表格,我可以用我的代码阅读文档中的大部分内容。 Word文档位于以下链接中- https://drive.google.com/file/d/0B1C7jj9dLG2

  • 我需要循环一些word文档,并从word文档中提取图像,并将其保存在单独的文件夹中。我尝试过将它们保存为超文本标记语言文档的方法,但它不太适合我的需求。 现在,我使用inlineshapes对象循环浏览图像,然后将它们复制粘贴到publisher文档上,然后将它们保存为图像。但是,在运行脚本时,我会遇到运行时自动化错误。对于使用Publisher运行时库,我尝试了早期绑定和晚期绑定,但都遇到了错误

  • 本文向大家介绍C#导出文本内容到word文档的方法,包括了C#导出文本内容到word文档的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#导出文本内容到word文档的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。