• ベストアンサー

列を移動させるvbaコードを教えてください。

access2003を使用しています。 画像はテーブルですがフォームのデータシートビューで 画像のようにフォールド2を一番左に移動するvbaコードを知りたいです。 vbaで可能なのでしょうか? ご教授よろしくお願い致します。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> vbaで可能なのでしょうか? 可能です。 VBAで、データシートでのフィールドの並び順を変えるには、 コントロールの「ColumnOrder」プロパティを使用します。 以下、データシート表示しているフォームの名前を「DS1」、 列を操作するためのポップアップ型フォームの名前を「PF1」 とした場合のコード例になります: 'PF1上の「列移動」コマンドボタンのクリック時イベント Private Sub 列移動_Click()   '「DS1」フォームの「フィールド2」を、左端に移動   '(ColumnOrderは、一番左端が1になります)   Forms!DS1!フィールド2.ColumnOrder = 1 End Sub ・・・以上です。 なお、ここでの「フィールド2」は、『コントロール ソース』となる フィールドの名前ではなく、データの表示に使用している コントロールの名前(テキストボックス名など)になるので、 注意してください。 (データシート型にしているので、通常より間違いやすいかと:  「フィールド名=コントロール名」で作成している場合は  特に問題ありません) ~~~~~~~~~~~~~~~~~~~~~~~ 実際に使用する場合は、対象フィールドや移動する位置も ユーザーが指定することになるでしょうから、例えば以下の ような形になるかと思います: Private Sub 列移動_Click() 'エラー発生時は「エラー処理:」の行に飛ばす On Error Goto エラー処理   Dim Frm As Form, Ctl As Control   Dim sCName As String, iOrder As Integer   '「DS1」フォームの『対象列』コンボボックスで移動する   'フィールドを、『移動先』テキストボックスで移動先を、   'それぞれ指定   sCName = Me!対象列   iOrder = Me!移動先   '対象フォームとコントロールを変数に格納   Set Frm = Forms!DS1   Set Ctl = Frm.Controls(sCName)   '指定したコントロールを、指定した位置に移動   Cntl.ColumnOrder = iOrder    終了処理:   '明示的にメモリを解放した後、処理を終了   Set Ctl = Nothing   Set Frm = Nothing   Exit Sub エラー処理:   'エラー発生時はMsgBoxでその説明を表示して、処理を中断   MsgBox Err.Number & ":" & Err.Description, vbCritical ,Me.Name & " 列移動"   Resume 終了処理 End Sub

bkshfu
質問者

お礼

大変参考になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう