- 締切済み
アクセス・デザインビューのレイアウトの戻し方
アクセスのデータシートビューで、項目の表示幅を変えていたら、どこで操作を間違えたか、項目の並び順が変わってしまいました。項目数があまりにも多いので、元の並び順に一気に並び変える方法を教えて下さい。お願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- DexMachina
- ベストアンサー率73% (1287/1744)
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のウィンドウに戻って、テーブルのフィールド表示順を確認してみて 下さい。
- DexMachina
- ベストアンサー率73% (1287/1744)
> 元の並び順に一気に並び変える方法 この、「元の並び順」ですが、各コントロールのタブ移動順と 同じ順序になっている、と考えてよろしいでしょうか。 もしそうでしたら、フォームの「開く時」イベントに以下のような 記述をすると、タブ移動順と同じ順序にフィールドを並べ替え できます。 (並べ替えたら、下記コードを削除して、フォームを保存: コードを残しておくと、列の移動を次回に引き継げなくなります(汗)) 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ファイルをコピーした上で、そちらで動作確認 してみて下さい(汗)
お礼
回答ありがとうございます。 フォームを使っていない単なるテーブルなので、 テーブルを登録した時の初期値に戻せたらと思ったのですが、 そんな機能はやはり無いのでしょうか。
- nakayan_4
- ベストアンサー率55% (649/1171)
あいうえお順などの場合は一気にできるかもしれませんが、任意の並び順だった場合には、もう一度設定しなおすしかないのではないでしょうか? その瞬間であれば、「元に戻す」ボタン等を使って操作を戻せたかもしれませんが…。
お礼
回答ありがとうございました。
お礼
ありがとうございました。参考にします。