こんばんわ
mdb内の特定文字を含むテーブルを削除したいと思っております。
コードは、
Dim objCat, objTable
Set objCat = CreateObject("ADOX.Catalog")
objCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\AAA.mdb" _
& ";" & "Jet OLEDB:Engine;"
For Each objTable In objCat.Tables
If objTable.Type = "TABLE" Then
If (objTable.Name Like "*インポート エラー*") Then
Debug.Print objTable.Name & "削除"
objCat.Tables.Delete objTable.Name
End If
End If
Next
としたのですが Debug.print のみですと全テーブル名取得できますが
削除を実行すると一部のテーブルしか削除できません。
Doeventを入れてみたのですが同様でした。
どのようにしたら宜しいでしょうか? ご教授の程宜しくお願い致します。
For や For Each での列挙中に、そのメンバーを削除してしまっては、
列挙内容に不都合が起きても致し方ないかと。
やるのであれば、削除対象のテーブル名一覧を
VBA.Collection なり配列なりに一度受けておき、
それを使って削除してみましょう。
魔界の仮面弁士さん、こんばんわ
早速のご教授ありがとうございます。
配列で頑張ってみようと思います。
出来ましたら、ご報告致します。
では…
魔界の仮面弁士さん、こんばんわ
教えて頂いた通り配列で全て削除出来ました♪
AA = 0
For Each objTable In objCat.Tables
If objTable.Type = "TABLE" Then
If (objTable.Name Like "*インポート エラー*") Then
AA = AA + 1
ReDim Preserve strA(AA) As String
strA(AA) = objTable.Name
End If
End If
Next objTable
If AA > 0 Then
For AA = 1 To UBound(strA) Step 1
objCat.Tables.Delete strA(AA)
Next
End If
ありがとうございました♪
再度不明な点がございましたら、ご教授の程宜しくお願い致します。
> ReDim Preserve strA(AA) As String
今回のように要素数が事前にわからないデータの時は、
配列では無くコレクションを使った方が便利ですよ。
'コレクションを用意
Dim errTables As VBA.Collection
Set errTables = New VBA.Collection
For Each objTable In objCat.Tables
If objTable.Type = "TABLE" Then
If objTable.Name Like "*インポート エラー*" Then
errTables.Add objTable.Name 'コレクションに加える
End If
End If
Next
Dim tblName As Variant
For Each tblName In errTables
objCat.Tables.Delete tblName
Next
> 再度不明な点がございましたら、ご教授の程宜しくお願い致します。
http://www.tt.rim.or.jp/~rudyard/torii009.html
http://dora0.blog115.fc2.com/blog-entry-85.html
魔界の仮面弁士さん、こんばんわ
配列での処理方法ご教示頂きありがとうございます。
又、ご指摘ありがとうございます。
今後気をつけます。
では…