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

access2003を使用しています。

画像はテーブルですがフォームのデータシートビューで
画像のようにフォールド2を一番左に移動するvbaコードを知りたいです。
vbaで可能なのでしょうか?

ご教授よろしくお願い致します。

「列を移動させるvbaコードを教えてくださ」の質問画像

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/11 07:58

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A