ホームページ >データベース >mysql チュートリアル >SQL レコードセットからデータをコピーすると、Excel-VBA コードで「3704: オブジェクトが閉じられているときは操作は許可されません」エラーが発生するのはなぜですか?

SQL レコードセットからデータをコピーすると、Excel-VBA コードで「3704: オブジェクトが閉じられているときは操作は許可されません」エラーが発生するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-30 20:48:11383ブラウズ

Why Does My Excel-VBA Code Get a

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。