2016-08-03 25 views
0

私はAccessデータベースにデータを書き込むExcelプログラムを持っています。このデータベースでは、実行時に別のExcelファイルにデータをコピーするマクロがあります。私はAccessデータベースにデータを書き込んだ後、自動的にマクロを実行するように、元のExcelプログラムを編集したいと思います。今は、データをデータベースに書き込み、データベースを開き、マクロを実行してデータベースを閉じるように設定しました。これはやや不便です。アクセスデータベースのマクロは次のとおりです。アクセスを開かずにExcelからマクロを実行する

Sub copy() 



Dim strTable As String 
Dim strWorksheetPath As String 


strWorksheetPath = "FilePath" & "test.xlsx" 
strTable = "test" 

DoCmd.OutputTo acOutputTable, strTable, acFormatXLSX, strWorksheetPath 



End Sub 

プログラム内の関連するコードは、単にデータベースを開き、マクロを呼び出して閉じます。これを回避する方法があれば、データベースを開かなくても大丈夫です。ありがとう。

つまり、私は上記のコードをExcelで模倣する方法を探しています。アクセスデータベースを開く必要はありません。アクセスVBAを使用せずにワークブックを習得する。

+1

エラーチェックを追加する必要があります。 – HansUp

+0

アクセスを開かずにアクセスからコードをコピーする方法はありますか?私。 ExcelのVBAコードを使用して上記のコードを模倣する? – user33484

+0

いいえ、接続は問題ありませんが、開かずにアクセスできます。私は要求通りに投稿を編集しました。 – user33484

答えて

2

私はあなたが尋ねていることを理解していると思いますが、私が誤解した場合は私を修正します。

このコードをExcelワークブックに接続し、必要な参照をMicrosoft Office 14.0 Access database engine Object Library(ツール|参照)に追加し、パラメータをパラメータに合わせて変更します。

また、データベースはAccessセッションで開かれていない限りは、Accessデータベースに含まれているコードを実行することはできません

Option Explicit 

Public Sub SaveAccessTableToXL() 

    ' Under References, Add This 
    ' Microsoft Office 14.0 Access database engine Object Library 

    Dim db    As DAO.Database 
    Dim rs    As DAO.Recordset 

    Dim wb    As Workbook 
    Dim ws    As Worksheet 
    Dim rge    As Range 

    Dim strDatabase   As String 
    Dim strTable   As String 
    Dim strWorksheetPath As String 

    ' These are variables you need to set before running 
    strDatabase = "c:\databases\heatlink\linktest.accdb" 
    strWorksheetPath = "c:\databases\heatlink\" & "test.xlsx" 
    strTable = "tbl_areas" 

    ' Create New Workbook 
    Set wb = Workbooks.Add() 
    Set ws = wb.Sheets("Sheet1") 
    Set rge = ws.Range("A1") 

    ' Get Table Data from Database 
    Set db = DBEngine.OpenDatabase(strDatabase) 
    Set rs = db.OpenRecordset(strTable, dbOpenDynaset, dbReadOnly) 

    ' Copy Recordset into Worksheet 
    rge.CopyFromRecordset rs 
    rs.Close 

    ' Save Workbook 
    wb.SaveAs strWorksheetPath 
    wb.Close 

    MsgBox "Workbook Created: " & strWorksheetPath 
    Set wb = Nothing 
    Set ws = Nothing 
    Set rge = Nothing 

    Set rs = Nothing 
    Set db = Nothing 
End Sub 
関連する問題