2017-04-06 8 views
1

Excelから数値を抽出してレポートを自動作成する必要があります。 http://www.makeuseof.com/tag/integrate-excel-data-word-document/ExcelからのWordレポート自動化ソーシング番号

コードが正しく実行されず、多くのエラーが発生しました。 1. Excelは開けません 2.実行時エラー '438'が発生しました:オブジェクトはこのプロパティまたはメソッドをサポートしていません。

ウェブサイトで提案されている「初期バインディング」コードを使用していますが、動作しないため、「レイトバインディング」を使用するように調査されました。まだ動作しません。私は "Microsoft Excel 14.0 Object Library"を挿入し、 "ActiveX Control"の下のword docに "Label"を挿入します。

何が問題になったのか分かりません。

現在のVBAコードからコードの適応

Private Sub CommandButton1_Click() 

Dim objExcel As Object 
Set objExcel = CreateObject("Excel.Application") 

Set exWb = objExcel.Workbooks.Open("C:\Users\adong\Desktop\Reporting.xlsx") 

ThisDocument.DMY.Caption = exWb.Sheets("Summary").Cell(5, 4) 

exWb.Close 

Set exWb = Nothing 

End Sub 

前のコード

Private Sub CommandButton1_Click() 
Dim objExcel As New Excel.Application 
Dim exWb As Excel.Workbook 

Set exWb = objExcel.Workbooks.Open("C:\Users\adong\Desktop\Reporting.xlsx") 

ThisDocument.DMY.Caption = exWb.Sheets("Summary").Cells(5, 4) 

exWb.Close 

Set exWb = Nothing 

End Sub 
+0

Excelインスタンスを作成した後に 'objExcel.Visisble = True'を追加しない限り、Excelは開いていません。どのラインでエラーが発生していますか? –

+0

ありがとうTim。あなたは私のスキルレベルを今すぐにすることができます。 – Andy

+0

これは実行時エラーを示したこの行です – Andy

答えて

0

https://www.experts-exchange.com/questions/26874253/How-to-loop-with-VBA-on-all-controls-placed-in-a-Word-doc.html

をあなたは指定された名前のActiveXコントロールを取得するためにユーティリティ関数を書くことができますホスト文書:

Private Sub CommandButton1_Click() 

    Dim con As Object 
    Dim objExcel As Object, exWb As Object 


    Set con = ActiveXControlByName(ThisDocument, "DMY") 
    If Not con Is Nothing Then 

     Set objExcel = CreateObject("Excel.Application") 
     Set exWb = objExcel.Workbooks.Open("C:\Users\adong\Desktop\Reporting.xlsx") 
     con.Caption = exWb.Sheets("Summary").Cell(5, 4).Value 
     exWb.Close False 
     Set exWb = Nothing 
     objExcel.Quit 

    End If 

End Sub 

Function ActiveXControlByName(doc As Document, theName As String) As Object 
    Dim ilsh As InlineShape 
    Dim sh As Shape, ob As Object 
    For Each ilsh In doc.InlineShapes 
     If ilsh.Type = wdInlineShapeOLEControlObject Then 
      Set ob = ilsh.OLEFormat.Object 
      If ob.Name = theName Then 
       Set ActiveXControlByName = ob 
       Exit Function 
      End If 
     End If 
    Next ilsh 
    For Each sh In ActiveDocument.Shapes 
     If sh.Type = msoOLEControlObject Then 
      Set ob = sh.OLEFormat.Object 
      If ob.Name = theName Then 
       Set ActiveXControlByName = ob 
       Exit Function 
      End If 
     End If 
    Next sh 
    'if got here then control was not found... 
    Set ActiveXControlByName = Nothing 
End Function 
関連する問題