ODBC経由でデータを取得して結果を加工

12月なのに1月のような寒さです。
ストーブを出して、焼き芋中

今回は、EXCELで検索画面を作成して、
ODBC経由でACCESSのテーブルからデータを抽出して、
その結果を加工して、新規Bookに表示します。

EXCELで検索画面を作成する理由は、
ユーザーは、EXCELの画面に慣れているからです。

ODBC経由で結果を取得した後に
結果を別のシートにコピペして加工しようと思ったのですが、
データが表示される前に次のコードが実行されてしまい、
意図した結果が表示されなくて、一工夫した時のメモです。

最初の検索画面にもう一つボタンを追加して、
追加したボタンをクリックした時に
加工のコードが実行されるようにしました。

最初の画面
画像


検索ボタンをクリックした後の画面
画像


もう一つメモしておきたいことがあります。
SQL文を投げてみた時のメモです。
コードの一部です。
※このままコピペしても動きません。※

myFileName = "AAABBBCCC.accdb"
myTableName = "AABBB"
myCnc_1 = "ODBC;"
myCnc_2 = "DBQ=" & ThisWorkbook.Path & "\" & myFileName & ";"
myCnc_3 = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};"

'注意ACCESS側に投げる部分のテキストはシングルクオーテーションで囲む
'注意EXCELのVBA側のテキストを囲む部分はダブルクオーテーションで囲む
'ODBC軽油のワイルドカードでは%を使う。accessのクエリーでは*を使うが、*はこのコマンドからでは失敗する。
'10桁で指定してワイルドカード%を指定しても検索結果は表示される
'ここではINを使うため、ワイルドカードは使わない

myCmd = "SELECT * FROM " & myTableName & " WHERE 列名 IN('" & Bno & "')"
With ActiveSheet.QueryTables.Add(Connection:=myCnc_1 & myCnc_2 & myCnc_3, Destination:=Range("a1"))
.CommandText = myCmd
.Refresh
End With
UserForm1.Height = "338" '次へ進むための緑のボタンを表示しました。

緑のボタンが表示されても、
データの表示が終わるまで待たないと、意図した結果になりません。
緑のボタン上に注意書きを入れました。
「データが表示されたらこのボタンをクリックしてください。
リストが新規bookに表示されます。」
データが全て表示されると、EXCELの下部の
UserForm1.CommandButton3.SetFocus
緑のボタンをクリックすると、
表示されたデータを加工する部分のコードが実行されて、
新規BOOKに表示されて、処理が終了します。
これで抽出したデータの加工ができました。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック