Вопрос

Я работаю над приложением Word VBA macro для 80 или около того пользователей.В офисе высокая текучесть кадров, поэтому страдает обучение, и поэтому одним из самостоятельно установленных требований к этому проекту является исчерпывающая, понятная документация.Однако, чтобы дополнить это и избавить новичков от необходимости открывать 100-страничный документ, когда они хотят попробовать что-то новое, я хочу, чтобы в каждой пользовательской форме (их пять) была строка состояния, предоставляющая контекстную справку.Я нахожу всплывающие подсказки раздражающими.

У меня не так много опыта, поэтому я хотел

По сути, у меня есть файл, содержащий каждую строку состояния.(В настоящее время это текстовый файл, но мне было интересно, следует ли мне использовать электронную таблицу или CSV для удобства редактирования другими сотрудниками в будущем.) Каждый элемент управления имеет событие MouseMove, которое ссылается на функцию:GetStatus(cID), который открывает файл, захватывает строку и отображает ее в метке состояния.Он также извлекает несколько параметров из той же строки файла, например, является ли ярлык кликабельным (для ссылки на страницу в файле справки) и какого цвета должен быть ярлык.

Итак, несколько вопросов на самом деле:

Будет ли приложение работать медленно, если пользовательская форма постоянно ссылается на файл?Для меня это нормально, но я занимаюсь этим слишком долго, и я единственный пользователь, получающий доступ к этому файлу.К нему будут постоянно обращаться 80 человек.

Является ли наведение курсора мыши на элемент управления лучшим способом?Должен ли я вместо этого использовать координаты?

Самое главное (с точки зрения того, что мне приходится выполнять как можно меньше работы), есть ли какой-нибудь способ сделать это так, чтобы мне не приходилось вызывать событие MouseMove для каждого отдельного элемента управления?У меня есть добрых несколько сотен или около того элементов управления, каждый со своим собственным идентификатором (ну, пока нет, но они будут, если это единственный способ сделать это).Возможно, когда форма загрузится, я мог бы загрузить ВСЕ возможные строки состояния, чтобы они были готовы к любому наведению курсора мыши на элемент управления.Но тогда, может быть, время загрузки ничтожно мало?

Ценю любые идеи - особенно, если в VBA уже есть целый набор функций для этого, а я просто пытаюсь изобрести велосипед.Я не могу использовать строку состояния приложения, потому что пользователь редко видит само приложение.

Спасибо!

Редактировать:

Это как для ввода данных, так и для щелчка мышью и небольшого создания документа.

Это контролируемая среда, поэтому проблемы макробезопасности меня не сильно беспокоят - и если что-то пойдет не так, это чья-то вина или проблема :)

Это было полезно?

Решение

Это приложение для ввода данных или они просто нажимают на что-то?Поскольку часто поле с фокусом отличается от элемента, на который наведен указатель мыши, это может вызвать много путаницы.

Постоянное чтение из файла - огромная трата времени и ресурсов - гораздо лучше загружать их только один раз в массив или коллекцию при загрузке формы.

При использовании MouseMouse event лучше, чем coordinates, потому что вы можете перемещать объекты, не беспокоясь.Это большой объем кода, но вы должны быть в состоянии сгенерировать большую его часть, если у вас есть список имен элементов управления, потому что код должен быть идентичным.

ie

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub

Другие советы

Я бы рассмотрел свойство statusText и свойство ControlTipText элементов управления для такого рода справки.

statusText ( Текст состояния ) В этом примере задается текст справки в строке состояния для поля формы с именем "Возраст".

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top