2017-02-23 3 views
1

AccessからExcelレポートへのテーブルのエクスポートを自動化しようとしています。 Stack Overflowに関する私の研究から、エクスポートのためのVBAコード、そしてExcelシートをフォーマットするための別のコードを持つことをお勧めします。私はAccessからExcelシートの書式設定を実行することを大いに好むので、ボタンを押すだけで、その物がエクスポートされます。このレポートを実行することは絶対に嫌いです。私は、他にもやるべきことがあるとき、みんなが「今すぐ」を望んでいるからです。社長就任のためのものなので、私のような仲間はちょうど逃げなければなりません。AccessからExcelエクスポートテーブルを実行しようとしましたが、オブジェクト取得に必要なエラー

私は、これはここにコードを示唆した:https://stackoverflow.com/a/14401307/6850333を、私は任意の提案が高く評価され

Sub FormatACTrade(strFilePath As String) 'I'm running this from another _ 
sub that exports the tables to excel, I know functions are needed for _ 
an output but this is a private variable that I'm using within a modle_ 
so should be ok?? 

On Error GoTo ErrorHandler 

Dim objFile As Object 

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = False 
objExcel.DisplayAlerts = False 
Set objFso = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFso.GetFolder(strFilePath) 

If objFso.GetExtensionName(objFile.Path) = "xlsx" Then 
    Set objWorkbook = objExcel.Workbooks.Open(objFile.Path) 
    For Each sh In objWorkbook.Worksheets 
If sh.UsedRange.Address <> "$A$1" Or sh.Range("A1") <> "" Then 
     With sh 
     [Do stuff] 
     End With 
    End If 
    Next 
    objWorkbook.Close True 
End If 
End Sub 

「を設定していない変数またはWithブロック変数がオブジェクト」のエラーを取得しています。私はコーディングが新しく、vbaオブジェクト、スクリプト、およびアプリケーションに関するドキュメントは理解しにくいことを認めなければなりません。私はオブジェクトの名前を正しく指定していないと理解していますが、この行でコードが何をしているのかを実際には理解していません。Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)

+0

、それは逃しました。 'objFile'には何も設定しません。 – Comintern

+0

コンパイラにはフラグが立てられていませんが、それは私の頭の上にある行です。あなたは正しいですが、objFileは定義されていません。私はちょうど 'Dim objFile As Object'という行を追加しましたが、エラーは" Object variableまたはWithブロック変数が設定されていません "です。objFileに何を置くべきか分かりません。ファイル名は? –

+0

あなたがやろうとしていることに依存します。私は、 'objFile.Path'の両方のインスタンスが' strFilePath'であると思われます。 – Comintern

答えて

1

objFSOの必要性を削除することを検討してください。以前のコードでは、ファイルを反復処理するためにこのオブジェクトが必要でした。あなたはExcelファイルのパスを知っているので、単にWorkbooks.Open()方法でそれを渡します。それはそれはフラグを立て、ラインの場合

Sub FormatACTrade(strFilePath As String)  
    Dim objExcel As Object, objWorkbook As Object, sh As Object 

    Set objExcel = CreateObject("Excel.Application") 
    objExcel.Visible = False 
    objExcel.DisplayAlerts = False 

    ' OPEN WORKBOOK (IN BACKGROUND) 
    Set objWorkbook = objExcel.Workbooks.Open(strFilePath) 

    For Each sh In objWorkbook.Worksheets 
     If sh.UsedRange.Address <> "$A$1" Or sh.Range("A1") <> "" Then 
      With sh 
      [Do stuff] 
      End With 
     End If 
    Next sh 

    ' CLOSE AND SAVE WORKBOOK 
    objWorkbook.Close True 
    ' QUIT APP 
    objExcel.Quit 

    ' FREE RESOURCES 
    Set objWorkbook = Nothing 
    Set objExcel = Nothing 
End Sub 
+0

これは動作しています。ありがとうございました。他のMicrosoft Officeプログラムを別のMicrosoft Officeプログラムで実行するためのベストプラクティスのソースはありますか?どのようにして「無料リソース」に気づいたのか、アプリケーションを終了するのか分かりません。 –

+0

解像度を確認するには、同意してください(横にチェックマークを付けてください)。ベストプラクティスのための単一の文書があるかどうかはわかりません。しかし、私は様々な実例を通してこれらのアイテムを学びました。あなたはやって学ぶ! – Parfait

関連する問題