0

SSIS を使用せずに Excel VBA を SQL Server に参照する

上記の作業を行った後、ルーチンからすべてのグローバル変数/定数をコピーしました。

    Const CS As String = "Driver={SQL Server};" _
                       & "サーバー=****;" _
                       & "データベース=****;" _
                       & "UID=****;" _
                       & "PWD=****"
    Dim DB_Conn As ADODB.Connection
    Dim コマンドを ADODB.Command として
    DB_Status を文字列として暗くする
別のスプレッドシートの同様のモジュールに。私も同じモジュールにコピーしました
サブ Connect_To_Lockbox()
    If DB_Status <> "Open" Then
        DB_Conn を設定 = 新しい接続
        DB_Conn.ConnectionString = CS
        DB_Conn.Open ' 問題です!
        DB_Status = "オープン"
    終了条件
サブ終了
同じ参照を追加しました (ADO 2.8)

最初のスプレッドシートは引き続き機能します。DB_Conn.Open の 2 番目のポップアップで、「実行時エラー '-214767259 (80004005)': [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified」が表示されます。両方の参照を削除し、ファイルを保存して、再-参照を開いて再度追加しても役に立ちません。一方は引き続き機能し、もう一方はエラーになります。

?!?

4

4 に答える 4

1

同じエラー メッセージが表示されましたが、私の場合は何も変わっていませんでした。odbc ドライバーを再インストールする必要があるかどうか疑問に思いました (オンラインで読んだ内容に基づく)。いずれにせよ、Excel を再起動するとうまくいきました。解決策がはるかに簡単な場合もあります。:-)

于 2016-03-21T15:56:59.480 に答える
0

この質問は本当に古いことを認識しています。しかし、記録のために、ここでエラーの解決策を文書化したいと思います: それはスプレッドシートのデータ関連のエラーでした! 列が日付としてフォーマットされ、値 3000000 が含まれていました。フォーマットを数値に変更すると、エラー 80004005 が解決されました。

于 2012-11-27T13:05:19.533 に答える
0

エラーが表示されたら、「ローカル」ウィンドウをチェックして、CS が何を保持しているかを確認します。表示 > ローカル ウィンドウ

于 2009-11-19T20:03:24.057 に答える
0

問題:定数がコンパイラによって検出されません。

解決策:定数が別のモジュールに配置されている場合は、他のコードが参照できるようにそれを Public として設定する必要があります。

証明:
この理論を証明するために、次のことを行うことができます: 新しい Excel スプレッドシートを開く VBA デザイナに移動し、新しいモジュールを追加する このモジュールに:

Const TestString As String = "Test String"

次に、次のコードを ThisWorkbook に追加します。

Public Sub TestString()
   MsgBox (TestString)
End Sub

このリターンをワークブックに追加した後、ボタンを追加し、クリック時に実行するマクロとして「TestString」を選択します。

ボタンをクリックすると、空白のメッセージ ボックスが表示されます。VBA デザイナに戻り、Module1 の const を Public に変更します。スプレッドシートのボタンをクリックすると、メッセージ ボックスに "Test String" が表示されます。

于 2009-11-19T20:29:47.000 に答える