Question

Je travaille sur une application de macro VBA Word pour environ 80 utilisateurs. Le bureau a un taux de rotation élevé du personnel, la formation en souffre donc, et l'une des exigences auto-imposées pour ce projet est une documentation complète et conviviale. Cependant, pour compléter ceci, et pour éviter aux débutants de devoir ouvrir un document de 100 pages lorsqu'ils veulent essayer quelque chose de nouveau, je veux une barre d'état sur chaque formulaire utilisateur (il y en a cinq) qui fournit une aide contextuelle. Je trouve les info-bulles agaçantes.

Je n'ai pas beaucoup d'expérience, alors je voulais

J'ai essentiellement un fichier contenant chaque chaîne de statut. (C’est actuellement un fichier texte, mais je me demandais si j’utiliserais une feuille de calcul ou un fichier csv pour que les autres membres du personnel puissent le modifier plus facilement à l’avenir.) Chaque contrôle comporte un événement MouseMove qui fait référence à une fonction: getStatus (cID) qui ouvre le fichier. fichier, saisit la ligne et l’affiche dans l’étiquette de statut. Il récupère également quelques paramètres de la même ligne dans le fichier, comme par exemple si l'étiquette est cliquable (pour créer un lien vers une page du fichier d'aide) et quelle couleur l'étiquette doit être.

Donc, quelques questions vraiment:

L'application sera-t-elle lente si un utilisateur se réfère constamment à un fichier? Cela me convient, mais cela fait trop longtemps que je suis dans ce fichier et je suis le seul utilisateur à accéder à ce fichier. Il y aura 80 utilisateurs y accédant en permanence.

Est-ce que MouseMove sur un contrôle est la meilleure solution? Devrais-je plutôt utiliser des coordonnées?

Plus important encore (en ce qui concerne le moins de travail possible), existe-t-il un moyen de le faire pour ne pas avoir un événement MouseMove sur chaque contrôle? J'ai quelques centaines de contrôles, chacun avec son propre identifiant (enfin, pas encore, mais ils le feront si c'est le seul moyen de le faire). Peut-être que lorsque le formulaire sera chargé, je pourrais charger TOUTES les lignes d'état possibles afin qu'elles soient prêtes lorsque le contrôle est déplacé. Mais alors, peut-être que le temps de chargement est négligeable?

Appréciez toutes les idées ou pensées - en particulier si VBA dispose déjà de toute une gamme de fonctions pour le faire et si je tente simplement de réinventer la roue. Je ne peux pas utiliser la barre d'état de l'application, car l'utilisateur voit rarement l'application elle-même.

Merci!

EDIT:

C’est à la fois pour la saisie de données, les clics d’entourage et un peu de génération de document.

Comme il s’agit d’un environnement contrôlé, les problèmes de sécurité macro ne me préoccupent pas beaucoup - et si quelque chose ne va pas, c’est la faute ou le problème de quelqu'un d’autre:)

Était-ce utile?

La solution

S'agit-il d'une application de saisie de données ou clique-t-elle simplement sur des éléments? Étant donné que le champ sélectionné est souvent différent de l'élément survolé par la souris, cela peut entraîner beaucoup de confusion.

Lire constamment dans un fichier est une énorme perte de temps et de ressources - il est bien préférable de ne les charger qu'une seule fois dans un tableau ou une collection lorsque le formulaire est chargé.

Sur MouseMouse, l’événement est meilleur que les coordonnées car vous pouvez déplacer des objets sans vous inquiéter. C'est beaucoup de code, mais vous devriez être capable de générer la plupart de cela si vous avez une liste de noms de contrôle car le code doit être identique.

c'est-à-dire

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub

Autres conseils

Je considérerais les propriétés StatusText et ControlTipText des contrôles pour ce type d’aide.

StatusText Cet exemple définit le texte d’aide de la barre d’état pour le champ de formulaire intitulé "Âge".

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

ControlTipText Cela peut être attribué à partir de la feuille de propriétés du contrôle.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top