• ベストアンサー

アクセステーブルがあれば削除VBA

win10 office365 access365におきまして テーブル この例ではTMPがあれば テーブルそのものを削除し (ですから削除クエリを使うこととは違うと思いましたが) はじめから存在しないときは次のコードに進む ということでほかの記事を参考に作ってみたのが Public Function tmpdelete() If funcTableExists("T_TMP") = True Then DoCmd.DeleteObject acTable, "T_TMP" End If End Function ----------------------- そもそもfuncTableExistsというのは 付属の関数ではないのかなと調べまして ----------------------- Private Function funcTableExists(ByVal strTableName As String) As Boolean Dim db As Database Dim tdf As TableDef Set db = CurrentDb For Each tdf In db.TableDefs If (T_TMP= strTableName) Then funcTableExist = True Exit Function End If Next tdf Set tdf = Nothing db.Close Set db = Nothing End Function --------------------- If (T_TMP= strTableName) Then ここに削除判定の対象のテーブル名を入れましたが 上記いずれも 作動しません マクロのプロシージャで組み入れたいので subでばく functionで書くようにとありましたので 上記のようにしました また すみません 宜しくお願い致します

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

補足です。 T_TMPが開いているとエラーになりますから、削除の前に閉じるコードを記載しておいた方がいいと思います。 あと蛇足です。 > If (T_TMP = strTableName) Then 変数宣言を強制していれば上記は変数が定義されていないというエラーになります。 強制していなければT_TMPは変数として扱われますから何も代入されてなくカラの状態で funcTableExists("T_TMP") で呼び出された場合、strTableNameの中身は文字列"T_TMP"ですから If (T_TMP = strTableName) Then は If (""="T_TMP") Then は不一致となりなにもおこりません。 で If ("T_TMP" = strTableName) Then もしこうなっていればこのIF文は funcTableExists("T_TMP") で呼び出される限り一致となり T_TMPがあってもなくても DoCmd.DeleteObject acTable, "T_TMP" が実行されます。

sushidokei
質問者

お礼

追加コメントも有り難うございました。削除の前に閉じるコード こちらも作れて大丈夫でした 1と2との回答を合わせて作り直し、意味も理解できたうえで稼働しました。有り難うございました。

Powered by GRATICA

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

> If (T_TMP= strTableName) Then strTableNameは funcTableExists(ByVal strTableName As String) の引数ですので If funcTableExists("T_TMP") = True Then で "T_TMP" が入っています。 ですので、総当たりで見ているテーブルの名前(tdf.Name)と引数の値(T_TMP)が一致するかどうかの判断をしてください。 funcTableExist = True はsが抜けていますので funcTableExists = True 以下のように変更して試してみてください。 For Each tdf In db.TableDefs If (tdf.Name = strTableName) Then funcTableExists = True Exit Function End If Next tdf

関連するQ&A