
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.2です。
> テーブルを登録した時の初期値に戻せたらと思ったのですが、
テーブルでしたか・・・(汗)
対処法としては、
a)テーブル作成クエリで全レコードを新規テーブルに複製し、
これと元のテーブルとを差し替える
(新規テーブル側は、元のテーブルのデザインビューでの並び
順が反映される)
b)前回勘違いした(汗)フォームのコントロールでの「TabIndex」の
代わりに、テーブルのフィールドの「OrdinalPosition」を使用
の2種類が考えられます。
全体的な難易度としては「a)」の方が低い(簡単)ですが、もしも
テーブルにリレーションや主キー・インデックスなどが設定済みの
場合は、新規テーブルにこれらは反映されないため、再設定が
必要になる、という問題があります。
どちらを採られるかは、arisa5さんの判断にお任せします。
【テーブル差し替えによる対応法】
1)データベースウィンドウ(テーブルやクエリなどの一覧が表示される
画面)で、対象テーブルを選択
2)メニューで「挿入(I)→クエリ(Q)」を選択
3)『新しいクエリ』ダイアログが開くので、「デザインビュー」を選択して
『OK』ボタンをクリック
4)クエリのデザインビューで、画面上半分の領域に対象テーブルの
フィールド一覧が表示されているので、その最上部にある「*」を
ダブルクリックするなどして、下半分の『フィールド』に追加
5)メニューで「クエリ(Q)→テーブル作成(K)」を選択
6)『テーブルの作成』ダイアログが開くので、『テーブル名』欄に適当な
名前(→既存テーブルと同名にすると、既存テーブルが削除される
ので注意)を入力し、『OK』ボタンをクリック
7)『クエリ デザイン』ツールバーの「!」(実行)ボタンをクリックするか、
メニューで「クエリ(Q)→実行(R)」を選択して、テーブルを作成
8)旧テーブルの名前を変更し、新規作成したテーブルを、その名前に
書き換えて差し替え
【VBAによる対処法】
まず、以下のコードを、標準モジュールに貼り付けたら、適当な名前を
つけて保存して下さい:
(メニューで「挿入(I)→標準モジュール(M)」を選択すると、新規の標準
モジュールが表示されます)
'~~~~~~ここから貼り付け~~~~~~
Public Sub InitializeColumnOrders(TName As String)
On Error GoTo エラー処理
Dim dbs As DAO.Database, tdf As DAO.TableDef, fld As DAO.Field
Const strMsg As String = "以下のテーブルのフィールド表示順を初期化します:"
'MsgBoxで「キャンセル」を選択した場合は処理を中止
If MsgBox(strMsg & vbCrLf & vbCrLf & TName, vbOKCancel) = vbCancel Then GoTo 終了処理
'実行前に、対象テーブルを閉じる
DoCmd.Close acTable, TName, acSavePrompt
'並び順を初期化するテーブルを設定
Set dbs = CurrentDb
Set tdf = dbs.TableDefs(TName)
'各フィールドの並び順を、デザインビューでの並び順に合わせる
For Each fld In tdf.Fields
fld.Properties("ColumnOrder") = fld.OrdinalPosition + 1
Next
'テーブルを開いて結果を表示
MsgBox "初期化しました。"
DoCmd.OpenTable TName, acViewNormal
終了処理:
Set tdf = Nothing
Set dbs = Nothing
Exit Sub
エラー処理:
MsgBox Err & ":" & Error$, , "InitializeColumnOrders(Sub)"
Resume 終了処理
End Sub
'~~~~~~ここまで貼り付け~~~~~~
次に、キーボードでCtrl+Gキーを同時押しして、イミディエイト ウィンドウを
表示します。
そこに「InitializeColumnOrders("テーブル1")」と入力して、Enterキーを
押せば、処理は終了です。
Accessのウィンドウに戻って、テーブルのフィールド表示順を確認してみて
下さい。
No.2
- 回答日時:
> 元の並び順に一気に並び変える方法
この、「元の並び順」ですが、各コントロールのタブ移動順と
同じ順序になっている、と考えてよろしいでしょうか。
もしそうでしたら、フォームの「開く時」イベントに以下のような
記述をすると、タブ移動順と同じ順序にフィールドを並べ替え
できます。
(並べ替えたら、下記コードを削除して、フォームを保存:
コードを残しておくと、列の移動を次回に引き継げなくなります(汗))
Private Sub Form_Open(Cancel As Integer)
On Error GoTo エラー処理
Dim Cntl As Control
For Each Cntl In Me.Controls
'タブ移動順(TabIndex)を元に、列表示順(ColumnIndex)を設定
'(TabIndexは0から、ColumnIndexは1から開始なので、「+1」)
Cntl.ColumnOrder = Cntl.TabIndex + 1
Next
終了処理:
Set Cntl = Nothing
Exit Sub
エラー処理:
Select Case Err
Case 438 'TabIndexなどを持たないラベルコントロール等の場合
Resume Next
Case Else 'その他のエラー
MsgBox Err & ":" & Error$, , Me.Name
Resume 終了処理
End Select
End Sub
・・・一応、こちらでは6フィールドほどで動作確認済みですが、
元にしているタブ移動順が望んだ通りでなかった場合などを
考え、一旦mdbファイルをコピーした上で、そちらで動作確認
してみて下さい(汗)
この回答へのお礼
お礼日時:2009/08/23 16:49
回答ありがとうございます。
フォームを使っていない単なるテーブルなので、
テーブルを登録した時の初期値に戻せたらと思ったのですが、
そんな機能はやはり無いのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
最新日のデータのみ抽出するク...
-
クエリで編集できるようにした...
-
Accessのテーブルで、リンク?...
-
アクセス・デザインビューのレ...
-
ACCESSユニオンクエリから新テ...
-
差込印刷での全角表示について...
-
ファイルメーカーのCase関数で
-
アクセスで月単位の抽出
-
年度ごとの最大値
-
Excleピボットでデータのない部...
-
アクセスのクエリー作成
-
ACCESSでの文字数カウント
-
Accessの日付時刻型から日付、...
-
エクセルデータをワードで差し...
-
SQL文で パラメータが少なすぎ...
-
Accessでテーブルやクエリのリ...
-
Accessで、1つの項目に複数の...
-
教えてください! アクセスのac...
-
Access クエリの演算フィールド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのテーブルに共通するレコ...
-
Accessのテーブルで、リンク?...
-
テーブルに表示されているもの...
-
Accessのリンクされたテーブル...
-
最新日のデータのみ抽出するク...
-
ACCESSユニオンクエリから新テ...
-
access vbaにてテンポラリーテ...
-
Acccessで2つのテーブルから1...
-
Accessでリストの並び順を変更...
-
アクセス2016 チェックボックス...
-
ACCESS テーブルを見比...
-
ACCESS テーブルを見比...
-
ACCESSでテーブルをコピーしよ...
-
AccessでのリンクテーブルとADO...
-
クエリで同一テーブルの複数回...
-
アクセス 部分一致の抽出
-
accessのテーブルを閉じたとき...
-
access2000・・テーブルをデー...
-
MDBファイルを比較するツール(...
-
ACCESSでABC判定をしたい
おすすめ情報