Строка состояния VBA - PullRequest
       23

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

3 голосов
/ 07 января 2009

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

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

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

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

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

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

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

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

Спасибо!

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

Это как для ввода данных, кликов и немного генерации документов.

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

Ответы [ 2 ]

2 голосов
/ 07 января 2009

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

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

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

е

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub
1 голос
/ 07 января 2009

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

* 1004 его статус * В этом примере задается текст справки строки состояния для поля формы с именем «Возраст».

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
...