アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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のウィンドウに戻って、テーブルのフィールド表示順を確認してみて
下さい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/26 15:33

> 元の並び順に一気に並び変える方法



この、「元の並び順」ですが、各コントロールのタブ移動順と
同じ順序になっている、と考えてよろしいでしょうか。

もしそうでしたら、フォームの「開く時」イベントに以下のような
記述をすると、タブ移動順と同じ順序にフィールドを並べ替え
できます。
(並べ替えたら、下記コードを削除して、フォームを保存:
 コードを残しておくと、列の移動を次回に引き継げなくなります(汗))

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ファイルをコピーした上で、そちらで動作確認
してみて下さい(汗)
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/23 16:49

あいうえお順などの場合は一気にできるかもしれませんが、任意の並び順だった場合には、もう一度設定しなおすしかないのではないでしょうか?


その瞬間であれば、「元に戻す」ボタン等を使って操作を戻せたかもしれませんが…。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/23 16:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!