0

Access のカスタム カテゴリに一連のクエリと、クエリ名を取得して実行し、各クエリの結果を Excel スプレッドシートの別のタブにコピーする VBA コードがあります。コードは次のとおりです。

Private Sub Command0_Click()

Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
Dim timestamp As String
Dim path As String

'Create the Excel spreadsheet
timestamp = Format(Now(), "yyyyMMddhhmmss")

path = "C:\Users\username\Desktop\ValidationResults" & timestamp & ".xlsx"

Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Add
Set oSheet = oBook.Worksheets("Sheet1")
oBook.SaveAs path
oExcel.Quit

'This gets a list of query names and puts it in a recordset
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("01 - GetValidationQueries")

'this runs each query and copies the results to a unique worksheet
Do While Not rs.EOF
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, rs("Name"), path, True, Left(rs("Name"), 2)
    rs.MoveNext
Loop

End Sub

"01 - GetValidationQueries" クエリは、MSysNavPaneGroupToObjects テーブルと MSysNavPaneObjectIDs テーブルを調べて、カスタム カテゴリ内のクエリの名前を取得します。

問題は、フォーム ボタンをクリックしてこのコードを実行すると、DoCmd 行で次のエラーが発生することです。

Run-time error '3275':
Unexpected error from external database driver (1309).

コードを 1 行ずつ (毎回 F8 キーを押して) 実行すると、正常に実行されるため、TransferSpreadsheet プロセスが遅すぎると推測されます。その行の後に一時停止を入れる以外に、これを機能させるより良い方法はありますか?

EDIT:次のコードを使用して(少なくとも今のところ)

Public Function fnWait(intNrOfSeconds As Integer)
Dim varStart As Variant
  varStart = Timer
  Do While Timer < varStart + intNrOfSeconds
  Loop
End Function

次に、DoCmd 行の前後に...

fnWait (2)

...2 秒の遅延を作成します。これまでのところ機能しているようです。

4

1 に答える 1

1

これがお役に立てば幸いです。

http://p2p.wrox.com/access-vba/24421-wait-function-vba.html

私はそれをデータベースに追加したので、それを実装するのに助けが必要な場合は尋ねてください.

于 2013-04-15T14:34:29.360 に答える