|
▼lily さん:
こんにちは。
> ExcelのVBAでAccessの既存テーブルにデータをインポートし、
> さらにイベントプロシージャをExcelから直接実行し
> 最終的に作成したクエリをExcelの既存ファイルにエクスポートしたい
Excelでもからも SQL 文は発行できるので、
あえて Access を使わなくてもいけそうな気がします。
また、オブジェクトの作成・削除を繰り返すような動作は
不安定になりがちなので気をつけましょう。
以下、Excelだけで処理を済ます例です。
Sub DataExport2()
'要参照 Microsoft DAO x.x Object Library
Const InXls = "C:\Data.xls" '元データのExcel
Const OutXls = "C:\Out.xls" '出力先のExcel
Dim WS As DAO.Workspace
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
Dim i As Long
Set WS = DBEngine.Workspaces(0)
Set DB = WS.OpenDatabase(InXls, False, False, "EXCEL 8.0;HDR=YES;")
'データが Sheet1にある場合
strSQL = "SELECT sechi1, tranzak " _
& "FROM [Sheet1$] " _
& "WHERE sechi1 IN (" _
& " SELECT sechi1 " _
& " FROM [Sheet1$] " _
& " GROUP BY sechi1 " _
& " HAVING Count(sechi1) > 1)"
Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
'吐き出し先のExcelが既にある場合は削除
On Error Resume Next
Kill OutXls
On Error GoTo 0
With Workbooks.Add
'ヘッダ行の出力
For i = 1 To RS.Fields.Count
.Sheets("Sheet1").Cells(1, i).Value = RS.Fields(i - 1).Name
Next i
'データの出力
.Sheets("Sheet1").Range("A2").CopyFromRecordset RS
.SaveAs OutXls
.Close
End With
RS.Close: Set RS = Nothing
DB.Close: Set DB = Nothing
WS.Close: Set WS = Nothing
MsgBox "終了!"
End Sub
こんな感じでいかがでしょうか。
|
|