1

1 週間前、データベース内の特定の日付の間でクエリを実行するための多数のボタンを備えたフォームを作成し、それらの日付を Excel ファイルにエクスポートしました。ここ数日で、カスタム ファイルの場所、シート名、およびソース テーブル名をサポートする機能を拡張しました。これはすべて、私の後に来る人 (私はインターンです) がツールを使用できるようにするためです。

しかし、約 1 時間前にRun-time error '3275': unexpected error from database driver (1)、ポップアップ ボックスにエラー メッセージが表示されるようになりました。写真を直接アップロードすることはまだできませんが、フォームの構造の写真を次に示します。私のコードは以下の通りです:

Private Sub SendToExcel_Click()
DoCmd.TransferSpreadsheet acExport, , "TBL_XL_DATA", _
    "X:\Confidential\Weekly Intel.xlsx", _ \\The file location is here in the actual code
        True, "Input"

End Sub

これは「デフォルト」のエクスポート オプションで、ここ数日間変更していません。新しい機能は次のとおりです。

Private Sub CustomToExcel_Click()
DoCmd.TransferSpreadsheet acExport, , [Forms]![Date Range]![SourceTable], _
    [Forms]![Date Range]![FileDest], _
        True, [Forms]![Date Range]![SheetName]
End Sub

同じエラーがあり、TransferSpreadsheet を使用している同様の質問を見つけましたが、特に 1 時間前に問題なく (新しいコマンド) を実行したことを考えると、コマンドの実行が遅すぎることは問題ではないと思います。

コマンドが機能しない理由と、しばらく扱っていなかった変更されていないコマンドが同じエラーをスローする理由について当惑しています。誰かがエラー自体について十分に理解して、1つか2つの提案をしてくれることを願っています。何を探すべきですか?それについてより多くの情報を得るには、何をいじるべきですか?

あいまいなフォーラムで解決策を見つけました。私の問題は、転送スプレッドシートを処理するにはパスが長すぎることです。私のデータベースとExcelファイルは同じフォルダにあるので、私は幸運です. より長いパスをサポートする方法があると確信しているので、その方法を知っている人がいれば幸いです。今のところ、少なくとも制約の範囲内で作業できます。

4

2 に答える 2

2

TransferSpreadsheetエクスポート先のファイルの種類を指定する2 番目の引数が指定されていません。この引数は、Access に依存するのではなく、明示的に指定する必要があります。

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, etc..

Excel 2007 以降の場合 (.xlsx として保存)。

対応するスプレッドシート タイプの列挙を使用できるように、ユーザーが指定したファイル拡張子 (存在する場合) のチェックをコードに含めることができます。

表示されたエラーは、ファイル拡張子が指定されていないことが原因である可能性があります。

追加され TransferSpreadsheetた最大パス長は 64 文字です。最初に、フルパスを変数に格納し、この変数をメソッドに渡すなどの単純化を試みます。ただし、これで制限を回避することはほとんどありません。

個人的には、スプレッドシートを一時フォルダーまたは現在のフォルダーに転送します。

Application.CurrentProject.Path

次に、単純な FileSystem ステートメントを使用します。

FileCopy source, destination

ファイルをコピーし、最後に:

Kill source

一時バージョンを削除します。

これは少し長すぎるように見えますが、個人的には好きです。プロセスをより細かく制御できます。とにかく、64 文字の制限を回避する必要があります。

于 2013-07-03T23:15:26.343 に答える