hatena の Microsoft Access 掲示板



[7279] フォームのフォーカスが移動しないようにしたい Name:ななーし Date:2017/08/08(火) 13:40 [ 返信 ]
お世話になります。ななーしです。
現在、組図検索システムの改修をしているのですが、少しつまずいてしまいどうしたらよいかご相談致します。

内容はPDF表示用フォームを作成し、検索フォームからそのPDF表示フォームを開き、2つのフォームで検索したレコードのPDFをその表示フォームで見せるといったものを作成しました。

PDF表示フォームはMicrosoft Web Browserを使用し、以下のフォームのタイマーを利用して表示を更新しています。
Private Sub Form_Timer()
On Error GoTo ErrorTrap
If pdfUrl <> "" Then
Dim pdfCrl As String
pdfCrl = Me.OpenArgs

WB0.Navigate pdfUrl
WB0.Tag = pdfUrl
While WB0.ReadyState <> 4 Or WB0.Busy = True
DoEvents
Wend
pdfUrl = ""
End If
'Forms(pdfCrl).SetFocus
ErrorTrap:
End Sub

仕組みはpdfUrlはグローバル関数として定義し、各検索フォームにて行が移動した際にイベントでpdfUrlに値を入れます。その値を確認し値が入っていれば表示を更新し、pdfUrlの値をなくします。

現在の問題は行を更新した際にPDF表示フォームがタイマーによりフォーカスがそちらに移動するため、いちいち行を移動するのにフォームを戻って選択する必要がある状態です。改善としてはPDF表示フォームにフォーカスがいかず元の検索フォームにフォーカスを固定したいです。

以上、よろしくお願い致します。

[7280] RE:フォームのフォーカスが移動しないようにしたい Name:hatena Date:2017/08/08(火) 23:30
PDF表示フォームのタイマー時のコードもグーバル変数も不要です。
検索フォームから直接、PDF表示フォームの Web Browser を操作すればいいでしょう。

検索フォームのレコード移動時に下記のコードを設定。

Private Sub Form_Current()

  With Forms!PDF表示フォーム.WB0
    .Navigate Me.PDFフィールド
    While .ReadyState <> 4 Or .Busy = True
      DoEvents
    Wend
  End With
End Sub


フォーム名、フィールド名は実際のものに変更。

[7281] RE:フォームのフォーカスが移動しないようにしたい Name:ななーし Date:2017/08/09(水) 12:42
だいぶよくなりました。ありがとうございます。
PDF表示ボタンでもすぐその行が表示されるようにサブ関数にして組み込みました。帳票フォームのためなのかセットフォーカスをしても元の検索フォームにフォーカスがいかず、うまくいきません。検索項目のドロップダウンの方はドロップダウンを行うとフォーカスが移動したのですが><
何かいい方法はございますか?

Private Sub tglOpenDetail_AfterUpdate() 'PDF表示ボタン
On Error GoTo E
  If Me.tglOpenDetail Then
    DoCmd.OpenForm "PDF表示", , , , , , "S_AAA"
    Call pdfChange(Nz(Me.PDFPASS), False)
  Else
    DoCmd.Close acForm, "PDF表示"
  End If
E:
End Sub

Private Sub Form_Current()
On Error GoTo E
  If Me.tglOpenDetail Then Call pdfChange(Nz(Me.PDFPASS), False)
E:
End Sub

Private Sub pdfChange(pUrl As String, Optional PNameChk As Boolean = True)
  With Forms!PDF表示.WB0
    .Navigate pUrl
    While .ReadyState <> 4 Or .Busy = True
      DoEvents
    Wend
  End With
  If PNameChk = True Then
    pdfName = Me.U番号.Value & Me.工番号 & "_" & Me.登録番号 & ".pdf"
    Me.工番号.SetFocus
    Me.SetFocus
  End If
End Sub

[7282] RE:フォームのフォーカスが移動しないようにしたい Name:hatena Date:2017/08/09(水) 13:41
> 帳票フォームのためなのかセットフォーカスをしても元の検索フォームにフォーカスがいかず、うまくいきません

帳票フォームということは関係ありません。
コードが間違っているのです。
「想定通りに動かないときは、まずは自分のコードを疑え」
「プログラムは思った通りに動かない。書いた通りに動く。」
というプログラマー格言があります。


デバッグ方法で、ステップ実行というのはご存知でしょうか。

想定と違う動作になるときは、ステップ実行で1行ずつコードを実行して、原因を追求するといいでしょう。


とりあえず、下記を参考にして、pdfChange関数の先頭行にブレークポイントを設定して、ステップ実行してみるといいでしょう。

デバッグの意味と基本的なデバッグ手法 - Excel VBA

[7283] RE:フォームのフォーカスが移動しないようにしたい Name:ななーし Date:2017/08/11(金) 17:31
ブレークポイントのことは知っているのですが、毎回ブレークポイントを解除しても再度記憶され残ってしまう現象が発生することが多く使用していません。サーバー管理の問題なのかACCESS側なのかわかりませんが、すべてのブレークポイントの解除をしても戻らないケースが多くてよくわからず使っていませんでした。一応該当行を消せばよいみたいなのですが・・・

下記の両方をやってもダメでした。PDFが表示されたタイミングで必ずPDF表示のフォームがアクティブになります。
'Forms!フォーム名.SetFocus
DoCmd.SelectObject acForm, "フォーム名"

PDF表示フォームのVBAを書いておきます。

[7284] RE:フォームのフォーカスが移動しないようにしたい Name:hatena Date:2017/08/11(金) 18:35
> ブレークポイントのことは知っているのですが、毎回ブレークポイントを解除しても再度記憶され残ってしまう現象が発生することが多く使用していません。サーバー管理の問題なのかACCESS側なのかわかりませんが、すべてのブレークポイントの解除をしても戻らないケースが多くてよくわからず使っていませんでした。一応該当行を消せばよいみたいなのですが・・・

そうなんですか。それは困りますね。ステップ実行できないと、デバッグ作業が捗りませんので。

ブレークボイントの代わりに、Stopステートメントを使う方法もあります。

コードの途中に

Stop

と記述するとそこでコードが止まり、以降、F8キーなどでステップ実行できます。


一応、フォーカス移動しない原因は下記です。

pdfChangeを呼び出すときに、

Call pdfChange(Nz(Me.PDFPASS), False)

というように第2引数(PNameChk)にFalseを設定しています。
で、pdfChangeでは下記のように記述してます。

  If PNameChk = True Then
    pdfName = Me.U番号.Value & Me.工番号 & "_" & Me.登録番号 & ".pdf"
    Me.工番号.SetFocus
    Me.SetFocus
  End If

PNameChk がFalseのときには、If内のコードは実行されません。
当然、フォーカス移動はしません。

[7291] RE:フォームのフォーカスが移動しないようにしたい Name:朱色 Date:2017/08/16(水) 22:16
本題には関係ないのですが、ちょっと情報提供に。

> ブレークポイントのことは知っているのですが、毎回ブレークポイントを解除しても再度記憶され残ってしまう現象が発生することが多く使用していません。

ブレイクポイントを設定し、解除しないままにAccessやExcelを終了してしまうと、次回立ち上げ時にはブレイクポイントの表示が消えます。
ただし、何らかの情報が残ってはいるらしく、マクロを実行するとストップする...という現象は私も何度か確認しています。
もう一度ブレイクポイントをつけた上で解除して保存するとか、なんかガチャガチャしてたら直った記憶があります。

必ず発生するのかとかどうやって解除するのかという情報について、確定した回答は持ってないです...申し訳ない。

[7293] Accessファイルの動作がおかしくなったら、 Name:hatena Date:2017/08/17(木) 14:55
> ブレイクポイントを設定し、解除しないままにAccessやExcelを終了してしまうと、次回立ち上げ時にはブレイクポイントの表示が消えます。
> ただし、何らかの情報が残ってはいるらしく、マクロを実行するとストップする...という現象は私も何度か確認しています。
> もう一度ブレイクポイントをつけた上で解除して保存するとか、なんかガチャガチャしてたら直った記憶があります。

おかしな動作をするようになったら、
とりあえず最適化、それでだめなら、デコンパイル。

デコンパイル – アクセス使い倒し講座

それでだめなら、新規データベースファイルを作成して、そこに、問題のあるデータベースファイルから、すべてのオブジェクトをインポートする。

というようにしています。経験上、これで大抵の不具合は解消されます。

それでも、駄目な場合もあるので、定期的にバックアップを取っておいて、バックアップから戻します。(最近はここまでいったことはないですが)

[7294] RE:フォームのフォーカスが移動しないようにしたい Name:ななーし Date:2017/08/21(月) 12:32
朱色様、hatena様回答ありがとうございます。
夏季休暇で返信が遅くなり申し訳ございません。

まさに朱色様の言った通りの症状で、一度消して再度付け直し、消すと治ります。プログラム上、実際に保存して、動作を確認する必要があるためです。(Accessウィンドウを表示しない方法にて枠を消しているため、保存しないと変な感じになってしまうので、一度保存して終了し、再度確認してます。)
http://hatenachips.blog34.fc2.com/blog-entry-178.html

※変な感じとは、
左にユーザー設定の各フォームと表の一覧とリボンが表示された状態で設定したフォームサイズにリサイズしてしまい、変な感じで表示される。

少し時間がとれなくなったため、再度時間がある際に修正します。


  



無料レンタル掲示板・日記・ブログ Progoo