外部データベースにアクセスする方法
 
    QueryTable を新規に作成する場合。
VBA を使用して、外部データを Excel 97 のワークシートに取り込むには、Add メソッドを使用します。
このメソッドにより作成したクエリーは、Refresh メソッドが呼び出されるまで実行されません。
この構文は、以下のとおりです。
   WorkSheets オブジェクト .QueryTables.Add(Connection, Destination, Sql)
例えば、テーブル Test からフィールド Field1 と Field2 を抽出する QueryTable を新規に作成し、
抽出結果を Sheet1 のセル A1 に返すには、次のように記述します。
With Sheet1.QueryTables.Add(Connection:= _
      "ODBC;DSN=SQLSrv65;UID=demo;PWD=password", _
      Destination:=Range("A1"))
      .Sql = Array("SELECT Test.Field1, Test.Field2 FROM Test")
      .Name = "Contact List"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .BackgroundQuery = True
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = True
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .PreserveColumnInfo = True
      .Refresh BackgroundQuery:=False
  End With

実務編
Application.DisplayAlerts = False
With Sheets("Sheet2").QueryTables.Add(Connection:= _
"ODBC;DSN=" & UDB_DB & ";UID=" & "" & ";PWD=" & "", Destination:=Range("Sheet2!B11"))
.SQL = Array(SQL)
.FieldNames = False
.RefreshStyle = xlOverwriteCells
.Refresh BackgroundQuery:=False
Dim er
If Application.ODBCErrors.Count > 0 Then
Set er = Application.ODBCErrors(1)
msg = MsgBox("エラー発生が発生しました:" & _
er.ErrorString & " : " & er.SqlState, vbOKOnly + vbCritical, Title:="エラーが発生しました")
Else
'MsgBox "クエリー完了。: すべてのレコードが返されました。"
End If
Set er = Nothing
End With
Application.DisplayAlerts = True