プロが教える店舗&オフィスのセキュリティ対策術

テーブル1を元に作ったフォームをデータシートビューを作ったのですが
今は日付フィールドが左側で、金額フィールドが右側にあります。

これを、VBAで左側に金額フィールド、右側に日付フィールドを表示することは可能でしょうか?
エクセルなら列の切り取り、貼り付けをVBAで行えますが、
アクセスの場合はどうすればいいでしょうか?

「アクセス VBAで列の入れ替え データシ」の質問画像

A 回答 (4件)

フォームを作って、それをデータシート表示している中で・・・という事ですよね


詳細に表示しているテキストボックスの ColumnOrder を設定すれば良さそうです。

フォームをウィザードで表形式として作成すると帳票フォームが出来上がると思います。
これをデータシートに形式を変更すると、帳票フォームでのタブ移動順を元に
ColumnOrder が 1 ~ 連番で振られるようです。(初めてデータシート表示した時のもので)

現状の ColumnOrder は、日付=1、金額=2 となっていると思うので、
日付=2、金額=1 と設定してあげれば良いと思います。


以下、確認した環境を紹介しておきます。

フィールド「an」「F1」「F2」をもつテーブルを元に、ウィザードで表形式でフォーム作成
既定のビューをデータシートに変更
テキストボックス名をフィールド名と違うものにしたい(確認用)ので、名前先頭に「txt_」付加
このフォームをサブフォーム「FSUB」としてメインのフォームに組み込み
メインフォームでは、表示順切り替え用にオプショングループ設置
画面の雰囲気は画像を見てもらうとして、処理として記述したのは以下

Private Sub SetVal(iAn As Long, iF1 As Long, iF2 As Long)
  Dim sS As String

  With Me.FSUB.Form
    .Painting = False
    .txt_an.ColumnOrder = iAn
    .txt_F1.ColumnOrder = iF1
    .txt_F2.ColumnOrder = iF2
    .Painting = True

    sS = "ColumnOrder : " & vbCrLf
    sS = sS & " txt_an = " & .txt_an.ColumnOrder
    sS = sS & " txt_F1 = " & .txt_F1.ColumnOrder
    sS = sS & " txt_F2 = " & .txt_F2.ColumnOrder
  End With
  Me.lab1.Caption = sS
End Sub

Private Sub Form_Load()
  Me.op1 = 1
  Call op1_Click
End Sub

Private Sub op1_Click()
  Select Case Me.op1
    Case 1: Call SetVal(1, 2, 3)
    Case 2: Call SetVal(1, 3, 2)
    Case 3: Call SetVal(3, 2, 1)
  End Select
End Sub


※ データシートで表示される項目名部分は、
・テキストボックスにラベルがくっついていたら、そのラベルの Caption
・くっ付いていなかったら、テキストボックスの名前
が使われたと思います。

※ データシート表示中、項目部分をドラッグ&ドロップで順を変更できますが
その時にはこの ColumnOrder が書き換えられていたと思います。
ヘルプ等参照してみてください
「アクセス VBAで列の入れ替え データシ」の回答画像3
    • good
    • 3
この回答へのお礼

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

お礼日時:2013/07/23 22:22

これは、VBAの領域ではないのでは?



データシートビューを開いて、
フィールド名を左右にドラッグではダメですか
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/23 22:22

普段、テーブルを直接いじることがほぼ無いので逆にお聞きしたいのですが・・


この「テーブルのフィールド順変更」をVBAでやる理由ってどこにあるのでしょう?



テーブルにフィールドを追加・削除するコードと言うものはありますが、
「フィールドの並び順を変える」と言うものは無いようですので、強引にVBAでやるなら
・テーブルを「希望の並び順で」作成
・元のテーブルから新規のテーブルにレコードを移動
・元のテーブルを削除
・新規テーブルの名前を変更
あるいは、
・テーブルに新規フィールドを追加
・元のフィールドから新規フィールドにデータをコピー
・元のフィールドを削除
・新規フィールドの名前を変更
と言うプロセスが必要です。

どちらにせよ、組んであるリレーションやクエリなどに影響が出ますので、
決してオススメ出来る手段ではありません。


テーブル構造をいじる(フィールド順を変える)なら
デザインビューで行った方が確実で早いです。
画面表示だけの問題であれば、順番を入れ替えたクエリを作る方が早いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/23 22:22

テーブルそのものを変更するなら


1)テーブルをデザインビューで開く
2)列の定義情報が行単位で表示されるので、行をドラッグ
3)保存して開く
と結果確認できます。

> VBAで列の入れ替え
列を逆にしたクエリを作成すればよろしいかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/23 22:22

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

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


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