====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*= [ 三流PG 番外編 今日の一品 No.020 ] 2000/04/01 土曜日 発送予定 =*====*====*====*====*====*====*====*====*====*====*====*====*====*====*==== 三流PG 番外編 今日の一品 は 隠し味として、 軽めのVBA関係のサブルーチンを載せていきたいと思います。 ----------------------------------------------------------------------------Access インポート エラー テーブルを消したい
今回は、実作業で(私の仕事で)、 FDに入力されたExcelデータを取りこむ処理で、 なぜか、Access側に下記のようなインポートエラーテーブルが できてしまいます。 DoCmd.TransferSpreadsheet acImport, 6, "FD変換データ", "A:\DATA.xls", True, "" を実行すると、 DATA$_インポート エラー DATA$_インポート エラー1 DATA$_インポート エラー2 なんて、エラー情報テーブルが、できてしまう。 エラー フィールド 行 データ型の変換エラー NO 14 内容14行目を見てみると、、空の行だった、、 (データは13行で、客先入力者が14行目にゴミを入れていた?) など、データの入力のしかたによっては、 インポート エラーXXX のテーブルが毎日増えていきます。 コレを防止するため、 下記のような、Accessのテーブルを消す関数作りました。 '------------------------------------ Sub テーブルの削除(W_NAME As String) Dim DBS As Database, tdf As TableDef Dim strSQL As String ' カレント データベースへの参照を取得します。 Set DBS = CurrentDb ' TableDefs コレクションを更新します。 DBS.TableDefs.Refresh ' テーブルが存在する場合は、それを削除します。 For Each tdf In DBS.TableDefs If tdf.Name = W_NAME Then DBS.TableDefs.Delete tdf.Name End If Next tdf DBS.Close Set DBS = Nothing End Sub '------------------------------------ テーブル名を渡すと、消してくれる関数です。 call テーブルの削除("XXXXXXX") で使用します。 余談ですが、 IF文でLIKE演算子が使用可能なこと知ってました? (自分へ一言、、演算子なんだからねぇ、、、) If tdf.Name LIKE W_NAME Then として、 call テーブルの削除("*エラー*") を渡すと、エラーと名の付くテーブルを削除してくれます。 わかりやすいテストだと、 Sub test() If "ABCDEFG" Like "*C*" Then MsgBox "OK" Else MsgBox "NG" End If End Sub いろいろデータ変えて試してみて下さい。 長く書いたけど、また(Excelの名前一覧みたいに)、 DoCmd.TransferSpreadsheet のパラメーターか何かで、エラーテーブル作成しない方法あったりして やっぱ、三流だなぁ、、 と声が聞こえてきたところで、このへんで、、 今日も逃げ出す、、、演算子の意味が?だった Ken3 でした。 PS. Like 使えるなら、instr関数使わなくていいジャン、、 なんて言いたいけど、処理速度が違うか? *あまりlikeで楽すると、パターンマッチングだから、 処理時間のかかるプログラムになりそう、、 みなさん、ほどほどに、、、
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
←パソコンの技術系の書籍を探しているなら コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店 ※種類が豊富で探し易い※在庫ありが48時間以内発送 |