• ベストアンサー

ACCESSでフィールド名の変更(VBA)

VBAを使ってテーブルのフィールド名等を変更させたいと思います。 そういう事ってできるのでしょうか? フィールド名を作成者ではなく、利用者が設定するようにしたいと思っているのですが、どういった方法があるでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

>ちなみに、それはどういったやりかたでやったら良いのでしょう? 例えば、[フィールド名対応表]という名前のテーブルで、[フィールド名][変換名]というフィールドを作ります。 で、[フィールド名]には予め実際のテーブルのフィールド名を、正しく入力しておきます。 [変換名]にも初期値として[フィールド名]と同じ値を入力しておきましょう。 まず、変換名の登録は、更新クエリを実行します。 仮に[誕生日]というフィールド名を[生年月日]という名前に変更するとすると、コードは以下のような感じ。 Dim SQL As String 'SQLステートメント SQL = "UPDATE フィールド名対応表 SET 変更名 = '生年月日' WHERE フィールド名 = '誕生日'" DoCmd.RunSQL SQL 次にフィールド名に付けられた変更名を拾ってくる方法は、 Dim temp As String '変更名 temp = DLookup("変更名", "フィールド名対応表", "フィールド名 = '誕生日'") ちなみに、DLookup関数は、条件にあったデータの値を返す関数ですが、条件にあったデータがない場合は、Nullを返しますので注意して下さい。

toroon
質問者

お礼

大変わかりやすい説明、ありがとうございます。 ただ、利用者によってフィールドが幾つできるか分からないんです。 やっぱり上限を決めて設定するようにするしかないんでしょうね?

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

Option Compare Database Option Explicit Sub test() Dim db As Database Dim tdf As TableDef Dim fld As Field Set db = CurrentDb Set tdf = db.TableDefs!座席 With tdf .Fields(4).Name = "予約日付" End With End Sub 「予約日付」の部分は、n=Inputbox("フィールド名=")とでも聞いてnで置きかえる。 4番目のフィールド「テキスト日付」を「予約日付」に 変更できました。 .Fields("予約日付").Name = "T予約日付"というフィールドの捉え方も出来ます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 ADOXを使用すると出来ます。 まず、VBE画面のメニューの[ツール]→[参照設定]で、 「Microsoft ADO Ext. X.X for DLL and Security」(X.Xはバージョン) にチェックをします。 そして以下のようにコードを書きます。 Dim cat As ADOX.Catalog Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection cat.Tables("テーブル名").Columns("変更前のフィールド名").Name = "変更後のフィールド名" Set cat = Nothing ところで、フィールド名を利用者に自由に変更させるやり方は、あまりいいとは思います。 メンテナンスとかコーディングとかで不都合が生じる可能性があります。 フォームなどの表示上の問題なら、元のフィールド名と変更フィールド名の対応テーブルを作り、それを参照して表示を変更するという方がいいと思います。

toroon
質問者

お礼

ありがとうございます。 >フォームなどの表示上の問題なら、元のフィールド名と変更フィールド名の対応テーブルを作り、それを参照して表示を変更するという方がいいと思います。 そうなんです。フォームの表示上の問題なんです。 ちなみに、それはどういったやりかたでやったら良いのでしょう? 超初心者です。 よろしくお願いします。

関連するQ&A