【问题标题】:copy and paste named ranges from excel workbooks into one word document将命名范围从 Excel 工作簿复制并粘贴到一个 Word 文档中
【发布时间】:2017-02-08 23:25:06
【问题描述】:

我正在用 word 编写一个命令按钮,它将多个 excel 电子表格中的命名范围复制并粘贴(作为图片)到同一个(打开的)word 文档中。在here的一些帮助下,我让它适用于单个excel文件,但是当我尝试修改多选代码时,它所做的只是多次粘贴相同的范围(即来自一个工作簿)。 此外,必须有一种比不断打开和关闭 excel 来复制范围更优雅(阅读:更快)的方式......

Private Sub CommandButton1_Click()
  Dim objExcel As New Excel.Application, exWb As Workbook
    With Application.FileDialog(msoFileDialogFilePicker)
      .Title = "Select Risk Assessment Files"
      .Filters.Add "Macro-Enabled Excel Files", "*.xlsm"
      .AllowMultiSelect = True

    If .Show <> -1 Then Exit Sub
    For Each vrtSelectedItem In .SelectedItems
      Set exWb = objExcel.Workbooks.Open(.SelectedItems(1))
      '*** Use the values from excel here***
      exWb.Sheets("Risk Assessment").Range("CRA").CopyPicture_
         Appearance:=xlScreen, Format:=xlPicture

      '*** Close the opened Excel file
      exWb.Close Savechanges:=False
      Set exWb = Nothing
      Selection.EndKey Unit:=wdStory
      Selection.Paste

    Next vrtSelectedItem
  End With
  Selection.GoTo What:=wdGoToBookmark, Name:="insertbutton"
  MsgBox ("Done")
End Sub

感谢您的帮助...

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    你每次都打开同一个文件

    Set exWb = objExcel.Workbooks.Open(.SelectedItems(1))

    这就是为什么它所做的只是多次粘贴相同的范围(即来自一个工作簿)。改为:

    Set exWb = objExcel.Workbooks.Open(vrtSelectedItem)
    

    而且您每次都会得到不同的工作簿。

    关于“更优雅的方式”的问题,您需要打开和关闭每个要从中复制的工作簿,所以保持这种方式。

    【讨论】:

    • 宾果游戏。谢谢@A.S.H。我在想的是打开一个 Excel 实例,然后一个接一个地加载其中的文件,这样不是更快吗?
    • 很可能,您可以打开所有工作簿并在最后使用objExcel.Quit False 立即关闭应用程序。但这很消耗内存;这完全取决于工作簿的数量和大小。
    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多