水曜日, 12月 03, 2008
[VBA]QueryTable
▼質問
QueryTableって何?
どうやって使うの?
▼回答
ODBCのデータソースを使って簡単にデータベースにアクセスできる関数なんだ。
サンプルを示しておくから参考にしてくれ!
■参考サイト
[XL97]外部データベースにアクセスする方法
http://support.microsoft.com/kb/408061/ja
▼質問
QueryTableを使って簡単にデータベースにデータを登録したいんだ。
どうやってできるか教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!
■参考サイト
■QueryTables.Add/.Deleteと.Names().Delete - 半角チルダ
http://blog.goo.ne.jp/end-u/e/2fd0b68b8cb29e4b80dc7182a800fc9c
▼質問
Refreshで次のエラーが出るんだ。
「バックグラウンドでデータが更新中であるため、この操作は行えません。」
どうやったら回避できるか教えてくれ!
▼回答
それは、SQLの処理が終わる前に実行しているSQLの処理を止めるような
処理が実行されているからなんだ。
だから、SQLの実行が終了したのを確認してから次の処理を実行しなくてはいけないんだ。
そのサンプルを次に示しておくから参考にしてくれ!
Refreshの後に次のコードを書けばいいんだ。
QueryTableって何?
どうやって使うの?
▼回答
ODBCのデータソースを使って簡単にデータベースにアクセスできる関数なんだ。
サンプルを示しておくから参考にしてくれ!
If (Worksheets(シート名).QueryTables.Count <= 0) Then
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース;UID=ユーザ;PWD=パスワード", _
Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM " & tableName)
.Refresh BackgroundQuery:=False
End With
else
Selection.QueryTable.Sql = Array("SELECT * FROM " & tableName)
Selection.QueryTable.Refresh BackgroundQuery:=False
End If
■参考サイト
[XL97]外部データベースにアクセスする方法
http://support.microsoft.com/kb/408061/ja
▼質問
QueryTableを使って簡単にデータベースにデータを登録したいんだ。
どうやってできるか教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!
maxRow = Worksheets(シート名).Range("A65536").End(xlUp).row
maxCol = Worksheets(シート名).Rows(1).End(xlToRight).Column
desCol = maxCol + 1
For Each objQuery In Worksheets(シート名).QueryTables
objQuery.Delete
Next
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "DELETE FROM テーブル名 WHERE 条件)
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(シート名).Cells(1, desCol).ClearContents
For i = 2 To maxRow
strValue = ""
For j = 1 To maxCol
If (strValue <> "") Then strValue = strValue & ", "
strValue = strValue & "'" & Worksheets(シート名).Cells(i, j).Value & "'"
Next j
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "INSERT INTO テーブル名 VALUES(" & strValue & ")"
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(シート名).Cells(1, desCol).ClearContents
Next i
■参考サイト
■QueryTables.Add/.Deleteと.Names().Delete - 半角チルダ
http://blog.goo.ne.jp/end-u/e/2fd0b68b8cb29e4b80dc7182a800fc9c
▼質問
Refreshで次のエラーが出るんだ。
「バックグラウンドでデータが更新中であるため、この操作は行えません。」
どうやったら回避できるか教えてくれ!
▼回答
それは、SQLの処理が終わる前に実行しているSQLの処理を止めるような
処理が実行されているからなんだ。
だから、SQLの実行が終了したのを確認してから次の処理を実行しなくてはいけないんだ。
そのサンプルを次に示しておくから参考にしてくれ!
Refreshの後に次のコードを書けばいいんだ。
Do While .Refreshing
DoEvents
Loop