3

私は 80 人ほどのユーザー向けの Word VBA マクロ アプリに取り組んでいます。このオフィスはスタッフの離職率が高いため、トレーニングに問題があり、このプロジェクトの自主的な要件の 1 つは、包括的で使いやすいドキュメントです。ただし、これを補足し、初心者が何か新しいことを試したいときに 100 ページのドキュメントを開く必要がないようにするために、コンテキスト ヘルプを提供するすべてのユーザー フォーム (5 つある) にステータス バーが必要です。ツールチップが煩わしい。

経験が少ないので、やりたいと思っていた

基本的に、すべてのステータス文字列を含むファイルがあります。(これは現在テキスト ファイルですが、将来、他のスタッフが編集しやすいように、スプレッドシートまたは csv を使用する必要があるかどうか疑問に思っていました。) すべてのコントロールには、関数を参照する MouseMove イベントがあります: getStatus(cID) は、ファイルで、行を取得してステータス ラベルに表示します。また、ファイル内の同じ行から、ラベルがクリック可能かどうか (ヘルプ ファイル内のページにリンクするため) や、ラベルの色など、いくつかのパラメーターも取得します。

いくつか質問があります:

ユーザーフォームが常にファイルを参照している場合、アプリケーションは遅くなりますか? 私には問題ないように感じますが、あまりにも長い間使用しており、そのファイルにアクセスしているユーザーは私だけです。常に 80 人がアクセスしています。

コントロール上の MouseMove は最善の方法ですか? 代わりに座標を使用する必要がありますか?

最も重要なことは (できるだけ少ない作業で済むという点で)、すべてのコントロールで MouseMove イベントを発生させる必要がないように、これを行う方法はありますか? 私は数百ほどのコントロールを持っており、それぞれに独自の識別子があります (まあ、まだではありませんが、これが唯一の方法であればそうなるでしょう)。おそらく、フォームがロードされるときに、可能なすべてのステータス行をロードして、コントロールがマウスオーバーされたときにいつでも準備できるようにすることができます。しかし、それでは、ロード時間は無視できますか?

アイデアや考えを高く評価してください。特に、VBA にこれを行うためのさまざまな機能がすでにあり、車輪を再発明しようとしている場合は特にそうです。ユーザーがアプリケーション自体をめったに見ないため、アプリケーションのステータス バーを使用できません。

ありがとう!

編集:

これは、データ入力、クリック操作、およびドキュメント生成の両方に使用できます。

これは制御された環境であるため、マクロのセキュリティ問題は私にとって大きな懸念事項ではありません。何か問題が発生した場合、それは他の誰かのせいまたは問題です:)

4

2 に答える 2

2

これはデータ入力アプリですか、それとも単にクリックするだけですか? フォーカスのあるフィールドは、マウスがホバリングしている項目とは異なることが多いため、これにより多くの混乱が生じる可能性があります。

常にファイルから読み取ることは、時間とリソースの膨大な浪費です。フォームがロードされるときに、配列またはコレクションに一度だけロードする方がはるかに優れています。

On MouseMouse イベントは座標よりも優れています。心配することなく物を移動できるからです。これは大量のコードですが、コードが同一である必要があるため、コントロール名のリストがあれば、そのほとんどを生成できるはずです。

すなわち

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub
于 2009-01-06T22:09:44.827 に答える
1

この種の助けとして、コントロールの StatusText プロパティと ControlTipText プロパティを検討します。

StatusText 次の使用 例は、"Age" という名前のフォーム フィールドのステータス バーのヘルプ テキストを設定します。

With ActiveDocument.FormFields("Age")
    .OwnStatus = True
    .StatusText = "Type your current age."
End With

ControlTipText コントロールのプロパティ シートから割り当てることができます。

Private Sub UserForm_Initialize()
    MultiPage1.Page1.ControlTipText = "Here in page 1"
    MultiPage1.Page2.ControlTipText = "Now in page 2"

    CommandButton1.ControlTipText = "And now here's"
    CommandButton2.ControlTipText = "a tip from"
    CommandButton3.ControlTipText = "your controls!"
End Sub
于 2009-01-06T22:19:57.130 に答える