Строка состояния VBA

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

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

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

Так что собственно несколько вопросов:

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

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

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

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

Спасибо!

РЕДАКТИРОВАТЬ:

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

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


person user51498    schedule 06.01.2009    source источник


Ответы (2)


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

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

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

ie

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub
person DJ.    schedule 06.01.2009
comment
Да, я как бы решил, что нажатие клавиши в поле изменит статус, чтобы отразить текст справки для этого поля. Таким образом, перемещение вокруг все равно изменит статус. Надеюсь, большинство людей не печатают и не двигаются одновременно! :) - person user51498; 07.01.2009

Я бы рассмотрел свойство 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
person Fionnuala    schedule 06.01.2009