VBA状态栏

时间:2009-01-06 21:48:11

标签: vba ms-word ms-office status statusbar

我正在为80个左右的用户开发Word VBA宏应用程序。办公室的员工流动率很高,因此培训受到影响,因此该项目的自我要求之一就是全面,友好的文档。但是,为了补充这一点,并且为了保存新手必须在尝试新内容时打开100页文档,我希望在每个用户表单(有五个)上提供状态栏,以提供上下文帮助。我觉得工具提示很烦人。

我没有太多经验,所以我想要

基本上,我有一个包含每个状态字符串的文件。 (这是一个文本文件,但我想知道我是否应该使用电子表格或csv以便日后其他人员轻松编辑。)每个控件都有一个MouseMove事件,它引用一个函数:getStatus(cID)打开文件,抓取该行并将其显示在状态标签中。它还从文件中的同一行抓取一些参数,例如标签是否可点击(链接到帮助文件中的页面),以及标签应该是什么颜色。

真的有几个问题:

如果用户表单经常引用文件,应用程序会慢吗?对我来说感觉还不错,但是我已经使用了太久了,而且我是访问该文件的唯一用户。将有80个人不断访问它。

鼠标移动控件是最好的方法吗?我应该改为使用坐标吗?

最重要的是(就我而言,尽可能少的工作而言)是否有某种方法可以做到这一点,这样我就不必在每个控件上都有一个MouseMove事件?我有几百个左右的控件,每个都有自己的标识符(好吧,还没有,但是如果这是唯一的方法,他们会这样做)。也许当表单加载时,我可以加载所有可能的状态行,这样只要控件被鼠标移除它们就可以了。但是,也许加载时间可以忽略不计?

欣赏任何想法或想法 - 特别是如果VBA已经具备了一系列功能,我只是想重新发明轮子。我无法使用应用程序状态栏,因为用户很少看到应用程序本身。

谢谢!

编辑:

用于数据输入,点击和文档生成。

这是一个受控制的环境,所以宏安全问题对我来说不是一个大问题 - 如果出现问题,那就是别人的错误或问题:)

2 个答案:

答案 0 :(得分:2)

这是数据输入应用程序还是他们只是点击东西?因为通常焦点的区域与鼠标悬停的项目不同,这可能会引起很多混乱。

不断地从文件中读取是一个巨大的时间和资源浪费 - 在加载表单时,只将它们加载到数组或集合中要好一些。

在MouseMouse事件上比坐标更好,因为你可以移动东西而不用担心。这是很多代码,但如果你有一个控件名列表,你应该能够生成大部分代码,因为代码应该是相同的。

Sub Control_MouseMove()
  DisplayStatus(Control)
End sub

答案 1 :(得分:1)

我会考虑这种帮助的控件的StatusText属性和ControlTipText属性。

<强>状态文本 此示例为名为“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