3

Access データベースがあります。Data_01毎日、VBScript の ADO を使用して、テーブルを自動的にクエリし、結果を Excel スプレッドシートにエクスポートしたいと考えています。現在、私の ADO のスキルは不足しています。

  1. 昨日と今日からアイテムを選択する日時列があります。GUI クエリでは、基準は次のようになります。Between Date() And Date()-1
  2. PartNumber特定の部品番号を選択したい列があります。GUI クエリでは、基準は次のようになります。Series 400
  3. 次に、項目 1. と 2. の基準に基づいて他の列を選択したいと思います。
  4. 列のヘッダー行も取得したいと思います。

現在、テーブル全体を Excel にエクスポートしてから、VBScript を使用して必要な列を選択し、不要なデータをすべて削除してから、最終出力ファイルの列を自動調整しています。これは、プロセッサと時間を多少消費するようです。

4

4 に答える 4

1

データをインポートするために Excel の組み込み関数を試しましたか? 英語版のエクセルを持っていないので案内はしませんが、「データ」というメニューになっていると思います。

于 2009-02-19T19:04:03.673 に答える
1

ここにいくつかのサンプル VBScript があります

Dim cn 
Dim rs

strFile = "C:\Docs\LTD.mdb"

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile & ";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * FROM tblTable " _
& "WHERE CrDate Between Now() And Date()-1 " _
& "AND OtherField='abc' " _
& "AND PartNumber=1 " _
& "ORDER BY CrDate, PartNumber"

rs.Open strSQL, cn

Set xl = CreateObject("Excel.Application")
Set xlBk = xl.Workbooks.Add

With xlbk.Worksheets(1)
    For i = 0 To rs.Fields.Count - 1
        .Cells(1, i + 1) = rs.Fields(i).Name
    Next

    .Cells(2, 1).CopyFromRecordset rs
    .Columns("B:B").NumberFormat = "m/d/yy h:mm"
End With

xl.Visible=True
于 2009-02-19T20:02:16.767 に答える
0

Excel がない場合は、次のように ADO を使用して xls にアクセスできます。


Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
Const strDB = "" 'Location of Database file
Const strXLS = "" 'Location of spreadsheet


Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB
Set objExcelConnection = CreateObject("ADODB.Connection")
objExcelConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strXLS & ";Extended Properties=""Excel 8.0;HDR=Yes;"";"
Set objAccessRecordset = CreateObject("ADODB.Recordset")
Set objExcelRecordSet = CreateObject("ADODB.Recordset")

strAccessQuery = "SELECT * FROM Data_01 WHERE PartNumberColumn = 'Series 400' AND DateColumn BETWEEN #" & Date -1 & "# AND #" & Date & "#"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic

strTable = "Sheet1$"
objExcelRecordSet.Open "Select * FROM [" & strTable & "]", objExcelConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objAccessRecordset.EOF
   objExcelRecordSet.AddNew
   For i = 0 To objAccessRecordSet.Fields.Count - 1
       objExcelRecordset.Fields(i).Value = objAccessRecordset.Fields(i).Value
   Next
   objExcelRecordSet.Update
   objAccessRecordset.MoveNext
Loop

objExcelRecordset.Close
Set objExcelRecordset = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing

注意すべき唯一のことは、スプレッドシートの列の最初の行にタイトルがあることを確認することです。そうしないと、このスクリプトが失敗する可能性があります。

編集:
レコードセットを .csv ファイルに書き込むこともできます。


Const adClipString = 2
Const ForWriting = 2
Const ForAppending = 8
Const strDB = "C:\Test.mdb"
Const strCSV = "C:\Test.csv"


Set objAccessConnection = CreateObject("ADODB.Connection")
objAccessConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strDB

Set objAccessRecordset = CreateObject("ADODB.Recordset")

strAccessQuery = "SELECT * FROM Data_01 WHERE PartNumber = 'Series 400' AND TheDate BETWEEN #" & Date -1 & "# AND #" & Date & "#"
objAccessRecordset.Open strAccessQuery, objAccessConnection, adOpenStatic, adLockOptimistic

Set objCSV = CreateObject("Scripting.FileSystemObject").OpenTextFile(strCSV, ForAppending, True)
objCSV.Write objAccessRecordset.GetString(adClipString,,",",CRLF)

objCSV.Close
Set objCSV = Nothing
objAccessRecordset.Close
Set objAccessRecordset = Nothing
objAccessConnection.Close
Set objAccessConnection = Nothing

Excel は .csv ファイルを問題なく開きます。この方法の欠点は、Excel では .csv ファイルの保存がうまくいかないことですが、Excel では csv ファイルを xls として保存できます。

于 2009-02-19T21:14:25.657 に答える
0

私の最初の反応は、次のことです。

  1. エクスポートするデータを検索するクエリ オブジェクトを MS Access で作成します [データベース ウィンドウ -> クエリ -> 新規 (ここでは GUI ビルダーを使用します)]。
  2. クエリを Excel ファイルにエクスポートするマクロを作成します。私はそれについてここでもっと話します。これは VBA で行うこともできます... 多くの人は、その方が「純粋」であると言うでしょう (私もマクロを持っています)。しかし、あなたのボートを浮かせるものは何でも。
  3. 作成したばかりのエクスポート マクロを実行し、MS Access を終了する autoexec マクロ (MS Access が開いたときに自動的に実行されます) をセットアップします (Access の読み込み中に Shift キーを押したままにすることで、これをオーバーライドできます)。オリジナルへのテーブル リンクを作成するだけで、元の MS Access ファイルに影響を与えずにこれらの操作を実行するために、別の MS Access ファイルも作成する方が良いでしょう。
  4. スケジュールされたタスクを設定して、MS Access ファイルを 1 日に 1 回開きます。
于 2009-02-19T19:14:20.773 に答える