Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


246 / 2272 ツリー ←次へ | 前へ→

【12419】フィールド存在の判断条件を設けるには IKAI 13/10/5(土) 22:15 質問[未読]
【12420】Re:フィールド存在の判断条件を設けるには hatena 13/10/6(日) 8:41 回答[未読]
【12421】Re:フィールド存在の判断条件を設けるには IKAI 13/10/22(火) 18:03 お礼[未読]

【12419】フィールド存在の判断条件を設けるには
質問  IKAI  - 13/10/5(土) 22:15 -

引用なし
パスワード
   こんばんは

sheet1テーブルのフィールド名(検索項目)を削除するため、以下のVBAを動かしたら、一応目的が達成になっていますが、
ただ削除する前に「検査項目」があれば、削除する。なければ何もしないという判断条件をいれたいのですが、対処方法はわからなくて、教えてください、よろしくお願いします。

Function sdf()
CurrentDb().TableDefs("Sheet1").Fields.Delete ("検査項目")

End Function

【12420】Re:フィールド存在の判断条件を設けるには
回答  hatena  - 13/10/6(日) 8:41 -

引用なし
パスワード
   >sheet1テーブルのフィールド名(検索項目)を削除するため、以下のVBAを動かしたら、一応目的が達成になっていますが、
>ただ削除する前に「検査項目」があれば、削除する。なければ何もしないという判断条件をいれたいのですが、対処方法はわからなくて、教えてください、よろしくお願いします。

どろくさくFieldsコレクションをループして存在を確認するという方法

Function sdf()
  Dim db As DAO.Database
  Dim td As DAO.TableDef
  Dim fld As DAO.Field
  Dim flg As Boolean
  Set db = CurrentDb()
  Set td = db.TableDefs("Sheet1")
  For Each fld In td.Fields
    If fld.Name = "検査項目" Then
      flg = True
      Exit For
    End If
  Next

  If flg Then
    td.Fields.Delete "検査項目"
  Else
    MsgBox "「検査項目」フィールドはありません。"
  End If

End Function

しかし、こういう場合は、エラートラップを追加して対処するのが定石です。

Function sdf()
  On Error GoTo ErrHandler
  
  CurrentDb.TableDefs("Sheet1").Fields.Delete "検査項目"

  Exit Function
ErrHandler:
  Select Case Err.Number
  Case 3265
    MsgBox "「検査項目」フィールドはありません。"
  Case Else
    MsgBox Err.Number & ":" & Err.Description
  End Select
End Function

【12421】Re:フィールド存在の判断条件を設けるには
お礼  IKAI  - 13/10/22(火) 18:03 -

引用なし
パスワード
   hatena さん

 正確に動いています!大変ありがとうございました。

246 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free