6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Visual BasicAdvent Calendar 2022

Day 8

Access VBAで各テーブル/フィールドのプロパティを一括設定する

Last updated at Posted at 2022-12-08

ソースコード例

下記設定をシステムテーブル以外の全テーブルに適用する

  • 空文字列の許可: False
  • IME入力モード: オフ
  • HideNewField: True(データシートビューでフィールドの追加欄を隠す)
Option Compare Database
Option Explicit

Private Sub set_prop(obj As Object, name_obj As String, type_obj As Integer, value_obj As Integer)
    Dim prp As Object

    For Each prp In obj.Properties

        If prp.name = name_obj Then
            obj.Properties.Delete name_obj
            Exit For
        End If

    Next prp

    Set prp = obj.CreateProperty(name_obj, type_obj, value_obj)
    obj.Properties.Append prp
End Sub

Sub set_properties()
    Dim cdb As DAO.Database
    Dim def As Object
    Dim fld As Object

    Set cdb = CurrentDb

    For Each def In cdb.TableDefs

        If (def.Attributes And dbSystemObject) = 0 Then

            set_prop def, "HideNewField", 1, True

            For Each fld In def.Fields
                fld.AllowZeroLength = False
                set_prop fld, "IMEMode", 2, 2
            Next fld

        End If

    Next def

    cdb.Close
    Set cdb = Nothing
End Sub

躓いたところ

プロパティによって値の格納場所が異なる

  • テーブル全体のプロパティを変える場合
    TableDef.Propertiesコレクションから目的のプロパティを探す
With CurrentDb.TableDefs(i)
    .Properties("HideNewField") = True
End With
  • テーブル内の各フィールドプロパティを変える場合
    Fieldオブジェクト/Field.Propertiesコレクションから目的のプロパティを探す
With CurrentDb.TableDefs(i).Fields(j)
    .AllowZeroLength = False
    .Properties("IMEMode") = 2
End With

オブジェクト/コレクションに存在しないプロパティがある(?)

現象

デザインビュー上ではIME入力モードが見えるのに、下記のように書いたら「そんなプロパティないよ?笑」と怒られた

With CurrentDb.TableDefs(i).Fields(j)
    .Proportites("IMEMode") = 2
End With

解決法

TableDef.CreatePropertyで目的のプロパティを用意し、Properties.Appendで追加する

With CurrentDb.TableDefs(i).Fields(j)
    Set prp = .CreateProperty("IMEMode", 2, 2)
    .Properties.Append prp
End With
  • プロパティのデータ型を間違えると設定が正しく反映されない
  • 追加したプロパティの型は後から変更できない
    • Properties.Deleteで削除し、再度Properties.Appendする

おわりに

目的に応じて改造してください。

調べても中々答えに辿り着けず苦労しました。。。
そんな人が少しでも減れば幸いです。

参考にしたページ

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?