2016-03-21 3 views
0

レコードを表示するサブフォームのフォームがあり、ユーザーはそのサブフォームを再配置して、そのプリファレンスを保存できます。つまり、列の幅、順序、列の非表示などを変更していつでも変更を保存でき、次回にフォームが読み込まれるときにその変更が適用されます。これは、設定を表に保存してから、サブフォームのForm_Loadイベントの表からそれらのプリファレンスを引き出すことによって行われます。これはすべて正常に動作しますが、フリーズカラムを保存する機能も追加しようとしています。私はいくつの列が凍結されているかを追跡することができますし、列の順序を復元することもできますので、すべての列を固定解除して最初のX列を再凍結するのは簡単なことです。Accessのサブフォームの列のフリーズ解除

私は 'RunCommand acCmdUnfreezeAllColumns'を使用してすべての列をフリーズすることができます。私はフォーム上にフォーカスする必要があることも知っているので、カラムをフリーズ解除する前にmyForm.setFocus(myFormはサブフォームへの参照です)を実行しようとしました。これにより、「式に無効なメソッドがあります」というエラーが表示されます。これはおそらく、コントロールを有効にしたフォームにフォーカスを設定できないためだと思ったので、代わりにmyForm.Controls(0).SetFocusを試しました。これはエラーではなく、Screen.ActiveControlという値(およびフォームがロードされた後にセルにフォーカスがあるという事実)に基づいて、サブフォームの最初のセルにフォーカスを設定しているようです。しかし、私はエラー "コマンドまたはアクション 'UnfreezeAllColumns'は利用できません。ラインのRunCommand acCmdUnfreezeAllColumns。私はロード・イベントに集中しようとしていたので問題が発生している可能性もあると考えていましたので、最初に再描画メソッドを呼び出すことを試みましたが、それは何の違いもありませんでした。私は実行時にそれらをアンフリーズする必要はないように、デザインビューのすべての列をフリーズ解除することを考えましたが、ユーザーには設定が保存されていない可能性があります。

私はこれに関するアイデアが不足しています。すべての列を解凍して機能させるためには、正確に何が起こる必要がありますか?それとも私が行方不明になっている簡単な方法はありますか?このソリューションは、フィールド名を持つサブフォームを処理するのに十分な汎用性が必要です。ユーザーが環境設定を保存したときに表示されていたフィールド名のリストがありますが、環境設定が復元されたときにそれらがすべて存在することを保証するものではありません。

答えて

0

通常、これは私の仕事:

myForm.SetFocus 
RunCommand acCmdUnfreezeAllColumns 

はしかし、時にはそれが失敗したので、私はそれを繰り返すことを試みた:

On Error Resume Next 
myForm.SetFocus 
RunCommand acCmdUnfreezeAllColumns 
If Err.Number <> 0 Then 
    myForm.SetFocus 
    RunCommand acCmdUnfreezeAllColumns 
End If 
On Error GoTo 0 

ほとんど常に働いたことが、メニューコマンドは、100%ではありません信頼性のある。

関連する問題