2017-06-06 126 views
0

我对VBA相对来说比较新,并且很遗憾为什么我无法从Word中粘贴到Excel中。以下宏最终将值粘贴到Word中,即使我认为我正在激活Excel文档。
该宏旨在从Word运行;然后需要将来自各种FormField的值粘贴到现有Excel文件中的单元格中。 我搜索了一个类似的问题,虽然返回的结果似乎是我所经历的变化,我无法修改这些答案。 任何帮助,将不胜感激。VBA - 从Word运行宏以将值粘贴到Excel中

Sub Transfer() 

Dim WD As Object 
Dim ED As Excel.Application 
Dim EDS As Excel.Workbook 

Set WD = ActiveDocument 
Set ED = CreateObject("excel.application") 
ED.Visible = True 
Workbooks.Open FileName:= _ 
"C:\Users\Documents\AppealData.xlsx" 
ActiveWorkbook.Activate 
Set EDS = ActiveWorkbook 

WD.FormFields("AppNum").Copy 
EDS.Activate 
EDS.Sheets("Sheet1").Range("A1").Select 
Selection.Paste 

End Sub 
+0

为什么不从EXCEL运行宏并读取文件,然后将其粘贴到EXCEL中? – JahKnows

+0

Word文档将被填写;目的是让填写Word表格的用户在填写表格后运行宏,将各种表单域的值发送到Excel以便每月跟踪Word表单。在本月底,希望有一个Excel文件包含所有的Word数据。 –

+0

好的,你可以张贴一个你的word文件样本 – JahKnows

回答

0

您的Selection指的是当前的应用。要引用Excel应用程序,您需要使用ED.Selection。但无论如何依靠ActivateSelect是一个坏主意。

我建议你改变你的代码:

Sub Transfer() 

    Dim WD As Document 
    Dim ED As Excel.Application 
    Dim EDS As Excel.Workbook 

    Set WD = ActiveDocument 
    Set ED = CreateObject("excel.application") 
    ED.Visible = True 
    'Avoid "Activate" 
    Set EDS = ED.Workbooks.Open(FileName:= _ 
      "C:\Users\Documents\AppealData.xlsx") 

    WD.FormFields("AppNum").Copy 
    'Avoid "Activate" and "Select" and "Selection" 
    '"Paste" is a worksheet Method, use "PasteSpecial" for a Range 
    'Use "xlPasteValues" to avoid formatting issues 
    EDS.Sheets("Sheet1").Range("A1").PasteSpecial Excel.xlPasteValues 
End Sub 
+0

谢谢你,你可以使用你定义的对象从剪贴板复制和粘贴。很多,这当然有用 –

0

这应该在这里为你工作。

Sub Transfer() 
    Dim oExcel As Excel.Application 
    Dim oWB As Workbook 

    Set oExcel = New Excel.Application 
    Set oWB = oExcel.Workbooks.Open("C:\Users\Documents\AppealData.xlsx") 

    oExcel.Visible = True 

    Workbooks("Book1").Worksheets("Sheet1").Cells(1, 1).Value = _ 
     CStr(Documents("Document1").FormFields("AppNum").Result) 
End Sub 
+0

感谢您的时间,这与其他文章一样工作,感谢您的帮助! –