• 締切済み

アクセス・デザインビューのレイアウトの戻し方

アクセスのデータシートビューで、項目の表示幅を変えていたら、どこで操作を間違えたか、項目の並び順が変わってしまいました。項目数があまりにも多いので、元の並び順に一気に並び変える方法を教えて下さい。お願いします。

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答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のウィンドウに戻って、テーブルのフィールド表示順を確認してみて 下さい。

arisa5
質問者

お礼

ありがとうございました。参考にします。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答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ファイルをコピーした上で、そちらで動作確認 してみて下さい(汗)

arisa5
質問者

お礼

回答ありがとうございます。 フォームを使っていない単なるテーブルなので、 テーブルを登録した時の初期値に戻せたらと思ったのですが、 そんな機能はやはり無いのでしょうか。

  • nakayan_4
  • ベストアンサー率55% (649/1171)
回答No.1

あいうえお順などの場合は一気にできるかもしれませんが、任意の並び順だった場合には、もう一度設定しなおすしかないのではないでしょうか? その瞬間であれば、「元に戻す」ボタン等を使って操作を戻せたかもしれませんが…。

arisa5
質問者

お礼

回答ありがとうございました。

関連するQ&A