プロが教えるわが家の防犯対策術!

こんにちは。
以前、DexMachina様にご教授頂いたのですが
違うフォームを作っていたら
データシートビューからフォームビューへ切り替えられないので教えてくださいませ。(アクセス2003)
前回質問:http://okwave.jp/qa4982081.html


フォーム上(デザインビュー)にテーブルをドラッグしました。
(サブフォームのデフォルトのビューは、データシートビューになっていますが単票ビューに切り替えました。)

一度保存し、再度フォームを開くと、単票ビューで表示されるので
その状態で、
Sub test()
Forms("フォーム1").SetFocus

Select Case Forms("フォーム1").Form.CurrentView
Case 1 'フォームビューの場合 → データシートビューに切替
DoCmd.RunCommand acCmdSubformDatasheetView
' Forms("フォーム1").DefaultView = 2
Case 2 'データシートビューの場合 → ピボットテーブルに切替
DoCmd.RunCommand acCmdSubformPivotTableView
End Select

End Sub
を実行すると、ちゃんとデータシートビューに切り替わります。

そしてデータシートビューからフォームビューへ切り替えようと思い
再度上記のコードを実行しても何も起こりません。
(エラーにもなりません)

なぜでしょうか?
ちなみに規定のビューをデータシートビューにして上記マクロを実行しても同様何も起こりません。データシートビューのままです。

MsgBox Forms("フォーム1").DefaultView
で値を取得してみたら
データシートビューでもフォームビューでも0が返って来ます。

何か原因がわかる方いらっしゃいましたら
ご教授よろしくお願いします。

A 回答 (1件)

どうも、DexMachinaです。



> なぜでしょうか?

「Forms("フォーム1").Form.CurrentView」は、「メインフォームの、現在のビュー」を
確認していることになります。
一方、「acCmdSubform~View」は、「Subform」が示すとおり、サブフォームのビュー
を切り替えるコマンドです。

従って、最初の状態では、メインフォーム・サブフォームとも「フォームビュー」ですから
「Case 1」に該当することになり、サブフォームはデータシートビューに切り替わります。
一方、次の実行時は、サブフォームは「データシートビュー」ですが、メインフォームは
「フォームビュー」のままですから、1回目と同様に「Case 1」に該当することになり、
上と同じく「データシートビュー」に切り替えるコマンドが実行されますので、
サブフォームは変化なし(データシートビューのまま)、ということになってしまいます。

従って、まずは、「Select Case」の評価対象の修正が必要、ということになります。


また、提示されたコードでは、「Case 2」では「acCmdSubformPivotTableView」、
つまり「ピボットテーブル」に切り替えるコマンドが指定されていますので、フォームビュー
に戻したいということでしたら、ここも変更する必要があります。


ということで、以下のようなコードに変更すれば、ご希望の動作になるかと思います。
(なお「MsgBox Forms("フォーム1").DefaultView」で取得できるのは「既定のビュー」、
 つまり「フォームを開いた直後の表示方法」の設定値です。ビューを切り替えた後の
 「現在のビュー」を取得する場合は、「CurrentView」を使用します)


Sub Test()

  'フォーム1のサブフォーム「SF1」をアクティブにする
  '(他のコントロールがアクティブの場合に生じるエラーを回避)
  Forms("フォーム1").SetFocus
  Forms("フォーム1")!SF1.SetFocus

  Select Case Forms("フォーム1")!SF1.Form.CurrentView
    Case 1    'フォームビューの場合
      DoCmd.RunCommand acCmdSubformDatasheetView
    Case Else  '上記以外の場合
      DoCmd.RunCommand acCmdSubformFormView
  End Select

End Sub


※フォームビューとデータシートビュー以外を使用不可にしている場合は
  「Case Else」を「Case 2」としてもOkです。
    • good
    • 1
この回答へのお礼

何度もすいません。
とても助かりました。
なるほど、サブフォームの値を取得しないとダメなんですね。
うまく行きました!
ありがとうございます。
お世話になりました!!

お礼日時:2009/11/29 17:56

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

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