Google
 
Web このブログ

2005年02月26日

フォームのビュー判断

MSACCESS
◇フォームが印刷プレビューで表示されているかを判断する pfIsFmPv()

CommandBarsオブジェクトを使ったTipsその2です。

VBAでフォームを操作する時に、フォームがどんな状態で開いているか、知りたい場合があります。
FormオブジェクトのCurrentViewプロパティを用いれば、
	デザインビュー/フォームビュー/データシートビュー
、の3状態については判断できます。

しかし、フォームの印刷プレビュー状態については、判断できません。
 
そこで、[フォーム ビュー]ツールバーの[印刷プレビュー]ボタンが押されているかを調べて、印刷プレビュー状態の判断を行います。

pfIsFmPv( pFm )
 Input
pFm:対象となるフォームオブジェクト
Output
なし
Return
True :印刷プレビューです
False:印刷プレビュー以外

-------------- サンプルコード --------------
Function pfIsFmPv(pFm As Form) As Boolean

Const CMD_FORM_PREVIEW = 109

Dim cmd As Object

DoCmd.SelectObject acForm, pFm.Name

Set cmd = CommandBars("Form View") _
.FindControl(, CMD_FORM_PREVIEW, , , True)

pfIsFmPv = cmd.State

Set cmd = Nothing

Exit Function

End Function

フォームが閉じているかはノーチェックですので、関数を呼ぶ前にチェックしてください。

Access2002以降では、ピボットテーブル ビューピボットグラフ ビューが存在します。
これらを判断するには、サンプルコードのFindControlメソッドの第2引数で対応できます。
適当にカスタマイズしてください。
各ビューに対応するIDは、以下の通りです。
	印刷プレビュー … 109
ピボットテーブル ビュー … 5814
ピボットグラフ ビュー … 5815


※このTipsの補足


このネタが役に立ったらポチッとな→blog_ranking_03.gif
posted by Picaso at 10:45 | Comment(4) | TrackBack(0) | MS Access - Tips
この記事へのコメント
こんにちわ。雅です。

はじめまして。YU-TANGさんのとこからお邪魔しました。

YU-TANGさんの所に書いてあったもうちょっと簡単な方法を
考えてみました。

Option Compare Database
Option Explicit

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Public Function IsFormPreview(ByVal WindowHandle As Long) As Boolean

IsFormPreview = (FindWindowEx(WindowHandle, 0, "OPrtPrevPage", vbNullString) <> 0)

End Function

でどうでしょうか?

でわ。
Posted by 雅 at 2005年02月28日 10:41
こんばんは、YU-TANG です。

せっかくなので、私も考えてみました。

'------------------------------------------------------------
' 使用例)
' ret = IsFormPreview(Forms!frm1)
'------------------------------------------------------------
Function IsFormPreview(frm As Form) As Boolean
On Error Resume Next

  Dim i As Integer: i = frm.Page
  IsFormPreview = (Err.Number = 0)

End Function

# 参加することに意義がある!…なんて予防線張ってみたり。
Posted by YU-TANG at 2005年02月28日 21:36
では、オイラも...

Function test(frm As String)
Select Case CurrentProject.AllForms(frm).CurrentView
Case 0
 test = "デザインビュー"
Case 1
 test = "フォームビュー(ノーマル)"
Case 2
 test = "データシート"
Case 3
 test = "ピボットテーブル"
Case 4
 test = "ピボットグラフ"
Case 5
 test = "印刷プレビュー"
End Select
End Function

5の印刷プレビューはどのフォームタイプのフォーム
でも...5になると思うんだけど...

# 参加することに意義がある!…なんて防波堤作ってみたり。(?)
Posted by クロ at 2005年03月01日 17:29
クロさん、ピンポ〜ン♪

その通りですよ。当てられちゃたんで、後で追加記事書いときます。
Posted by Picaso at 2005年03月01日 22:57
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。