ホームページ >データベース >mysql チュートリアル >SQL レコードセットからデータをコピーすると、Excel-VBA コードで「3704: オブジェクトが閉じられているときは操作は許可されません」エラーが発生するのはなぜですか?
SQL データベース アクセスのための Excel-VBA のエラー処理
Excel-VBA から SQL データベースにアクセスしようとすると、一般的な問題が発生します。レコードセットから Excel シートにデータをコピーすると、ランタイム エラー 3704: 「オブジェクトが次の場合、操作は許可されません」が発生します。 Closed."
根本原因:
このエラー メッセージは、「CopyFromRecordset」メソッドで参照されているレコードセット (objMyRecordset) が閉じられていることを示しています。これは、データベースへの接続が失われた場合、またはレコードセットが明示的に途中で閉じられた場合に発生する可能性があります。
解決策:
この問題に対処するには、データベース接続が安定していることを確認し、レコードセットは、データ取得プロセス全体を通じて開いたままになります。修正された VBA コードは次のとおりです。
Sub GetDataFromADO() 'Declare variables' Set objMyConn = New ADODB.Connection Set objMyRecordset = New ADODB.Recordset Dim strSQL As String 'Open Connection' objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;" objMyConn.Open 'Set and Execute SQL Command' strSQL = "select * from myTable" 'Open Recordset' Set objMyRecordset.ActiveConnection = objMyConn objMyRecordset.Open strSQL 'Copy Data to Excel' ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset 'Close recordset and connection (optional, to ensure no open object handles) objMyRecordset.Close objMyConn.Close End Sub
注意:
「Close」メソッド (レコードセットと接続オブジェクトの両方) はデータの後に使用する必要があることに注意することが重要です。 -潜在的なエラーを回避するために、取得プロセスが完了しました。ただし、これらのオブジェクトはサブルーチンの終了時に自動的に閉じる必要があるため、厳密に明示的に閉じる必要はありません。
以上がSQL レコードセットからデータをコピーすると、Excel-VBA コードで「3704: オブジェクトが閉じられているときは操作は許可されません」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。