MS Office 开发工具--VBA


一、VBA 的 发 展 过 程
----在Office 中 包 含 着 一 种 加 强Office 功 能 的 语 言, 即 为Basic 语 言。 经 过 发 展, 在Office 97 中,Word、Excel、Access、Power Point 四 个 软 件 都 有 了 自 己 的 程 序 设 计 语 言, 分 别 称 为Microsoft Word Visual Basic、Microsoft Excel Visual Basic、Microsoft Access Visual Basic、Microsoft Power Point Visual Basic。 通 常 统 一 称 为VBA。 在Outlook 中 的 开 发 语 言 为Visual Basic Scripting Edition, 而 不 是 一 个 完 全 的VBA。 不 过,Visual Basic Scripting Edition 是VBA 的 一 个 较 小 的 子 集, 它 与VBA 兼 容。 当 然, 有 一 些VBA 支 持 的 特 性,Visual Basic Scripting Edition 并 不 支 持。
二、VBA 开 发 特 点
----1. Microsoft Office 对 象 模 型

----Visual Basic 是 一 种 面 向 对 象 的 开 发 语 言。 VBA 将Microsoft Office 中 的 每 一 个 应 用 程 序 都 看 成 一 个 对 象。 每 个 应 用 程 序 都 由 各 自 的Application 对 象 代 表。

----在Word 中, Application 对 象 中 包 容 了Word 的 菜 单 栏、 工 具 栏、Word 命 令 等 的 相 应 对 象, 以 及 文 档 对 象 等 等。 菜 单 栏 对 象 中 包 容 了 所 有 的 菜 单 及 菜 单 命 令。 工 具 栏 对 象 中 包 容 了 各 种 命 令 按 钮。 文 档 对 象 中 则 包 容 了 所 有 的 文 字、 表 格、 图 像 等 文 档 组 成 部 分 的 相 应 对 象。 文 档 对 象 是Microsoft Word Visual Basic 中 的 主 要 对 象。

----在Excel 中, Application 对 象 中 包 容 了Excel 的 菜 单 栏、 工 具 栏 等 的 相 应 对 象, 以 及 工 作 表 对 象 和 图 表 对 象 等 等。 工 作 表 对 象 和 图 表 对 象 是Microsoft Excel Visual Basic 中 的 主 要 对 象。

----在Access 中, Application 对 象 中 包 容 了Access 的 菜 单 栏、 工 具 栏 等 的 相 应 对 象, 以 及 报 表 对 象 和 窗 体 对 象 等 等。 报 表 对 象 和 窗 体 对 象 是Microsoft Access Visual Basic 中 的 主 要 对 象。

----在Power Point 中, Application 对 象 中 包 容 了Power Point 的 菜 单 栏、 工 具 栏 等 的 相 应 对 象, 以 及 演 示 文 档 对 象 等 等。 演 示 文 档 对 象 是Microsoft Power Point Visual Basic 中 的 主 要 对 象。

----2. 基 于 对 象 的 开 发

----(1) 使 用Microsoft Office 对 象

----Office 已 经 具 有 了 强 大 的 功 能,Office 的 对 象 模 型 使 得 可 以 使 用Microsoft Office 中 的 对 象 来 完 成 自 己 的 工 作。 程 序 员 可 以 不 必 浪 费 时 间 开 发 自 己 的 组 件, 只 需 充 分 地 利 用 Office 的 功 能。Office 开 发 者 可 以 在Office 的 基 础 上 进 行 自 己 的 开 发, 而 不 必 一 切 从 头 开 始。 例 如,Office 开 发 者 可 以 使 用Word 的 拼 写 检 查 器, 而 不 必 自 己 来 开 发 一 个 拼 写 检 查 器。

----(2) 用 户 创 建 对 象

----Office 开 发 者 可 以 在Office 对 象 中 创 建 自 己 的 对 象: 可 以 创 建 自 己 的 菜 单 和 工 具 栏, 添 加 到Office 的 对 象 集 合 中; 可 以 创 建 一 个 窗 体, 并 且 在 窗 体 中 添 加 控 件, 等 等。 例 如, 在 Word 中, 可 以 往 自 动 更 正 的 词 库 中 添 加 自 己 的 词 条。

----3. VBA 开 发Office 的 功 用

----有 人 也 许 觉 得Office 的 功 能 已 经 足 够 强 大 了, 是 否 还 有 必 要 使 用VBA 来 开 发Office。 的 确, 即 使 根 本 不 用 编 写 一 句 语 句,Office 就 可 以 完 成 用 户 所 能 遇 到 的 各 种 任 务。 但 是, 人 们 对 效 率 的 追 求 是 永 不 满 足 的, 这 就 是 使 用VBA 来 开 发Offic 的 原 动 力。

----(1)VBA 可 以 使Office 任 务 自 动 化

----在 使 用Office 的 过 程 中, 往 往 要 遇 到 一 些 重 复 性 的 系 列 工 作, 特 别 是 在 处 理 大 批 量 的 文 档 或 数 据 时。 通 过 录 制 宏 或 使 用Visual Basic 编 写 宏, 使 一 系 列 的 工 作 只 需 要 一 个 指 令 便 能 完 成, 这 就 成 倍 地 提 高 了 工 作 效 率。

----(2)VBA 可 以 定 制Office 满 足 自 己 的 需 要

----Office 是 一 个 功 能 异 常 庞 杂 的 软 件 包, 对 某 一 用 户 来 所 说, 许 多 命 令 可 能 一 辈 子 也 用 不 着, 而 另 外 一 些 命 令 可 能 得 经 常 使 用。 有 时 候, 功 能 复 杂 反 而 显 得 多 余。

----另 外,Office 的 外 观 显 得 异 常 的 繁 杂, 许 多 用 户 面 对 如 此 繁 杂 的 界 面 往 往 手 足 无 措。

----通 过VBA 可 以 设 置 自 己 的 界 面, 把 自 己 经 常 用 到 的 菜 单 命 令 和 工 具 栏 放 置 到 显 眼 的 地 方, 隐 藏 一 些 不 常 用 的 菜 单 或 工 具 栏, 并 且, 可 以 把 自 己 所 编 写 的 宏 设 置 为 菜 单 命 令 或 设 置 为 工 具 栏 中 的 命 令 按 钮, 方 便 了 使 用。

----并 且, 可 以 根 据 自 己 的 需 要 来 定 制Office 的 功 能, 满 足 自 己 的 需 要。

----(3)VBA 可 以 增 强Office 的 功 能

----Office 的 功 能 虽 然 强 大, 但 它 不 可 能 考 虑 到 所 有 情 况, 而 且 情 况 是 千 变 万 化 的, 各 种 情 况 都 有 特 定 的 要 求。

----通 过VBA 可 以 增 强Office 的 功 能, 以 处 理 各 种 各 样 的 任 务。 例 如, 可 以 设 置Word 拼 写 检 查 的 词 库; 可 以 往 词 库 中 添 加 新 的 词 语; 可 以 设 置 自 动 更 正, 设 置 自 己 经 常 遇 到 的 误 拼 等。

----(4)VBA 可 以 增 强Office 与 用 户 的 交 互

----在Office 中, 可 以 利 用Visual Basic 创 建 窗 体, 并 在 窗 体 中 添 加 控 件 等 用 户 接 口 元 素。 通 过 用 户 接 口, 应 用 程 序 可 以 得 到 用 户 的 请 求, 并 对 其 作 出 响 应。

----(5)VBA 可 以 集 成Office 的 功 能

----Office 不 是 几 个 软 件 的 简 单 组 合, 而 成 为 一 个 有 机 的 整 体 发 挥 巨 大 的 作 用。Visual Basic 提 供 了 集 成Office 的 功 能 的 一 种 手 段。

----通 过OLE( 对 象 的 链 接 和 嵌 入) 和DDE( 动 态 数 据 交 换) 技 术 的 使 用 可 以 集 成Office 的 功 能。 例 如, 利 用Visual Basic, 可 以 在Word 文 档 中 链 接Excel 数 据 表, 调 用Excel 来 对 该 数 据 进 行 处 理。 在Excel 中 处 理 该 数 据 表, 得 到 结 果 也 要 刷 新Word 文 档 中 的 数 据 表, 保 持 了 数 据 的 更 新。 这 时 的 文 档 确 切 地 说 应 该 是 一 个 复 合 文 档。

----OLE 自 动 化 技 术 则 提 供 了 一 种 在 应 用 程 序 中 控 制 源 文 档 的 方 法。OLE 自 动 化 的 优 点 是, 在 单 一 的 环 境 中 工 作, 同 时 可 以 使 用 其 他 应 用 程 序 的 功 能。

----在Microsoft Office 环 境 中, 利 用Visual Basic 开 发 应 用 程 序 时, 可 以 利 用OLE 自 动 化 组 合Microsoft Office 中 的 多 个 应 用 程 序, 建 立 自 动 化 应 用 程 序。Microsoft Office 提 供 了 大 量 的 材 料, 只 需 把 它 们 拼 凑 起 来。

三、 简 单 开 发 实 例:
字 符 统 计 程 序


----有 时 候, 要 对 某 字 符 在 文 档 中 的 出 现 次 数 进 行 统 计。 要 完 成 这 一 任 务, 可 以 在Word 中 开 发 一 程 序 来 较 快 地 统 计。
----打 开 要 统 计 的 文 档 后, 在 文 本 框 中 输 入 要 统 计 的 字 符, 如“OK!”, 然 后 选 择 是 否 区 分 大 小 写, 单 击“ 确 定” 按 钮, 便 可 以 进 行 统 计 了。

----设 计 该 程 序 的 步 骤 如 下:

----1 . 新 建 一 窗 体Userform1, 窗 体 的caption 属 性 设 置 为“ 字 符 统 计”。 窗 体 中 包 容 以 下 控 件:

----复 选 框 控 件CheckBox1 Caption = “ 区 分 大 小 写"

----命 令 按 钮 控 件CommandButton1 Caption = “ 确 定 "

----标 签 控 件Label1 Caption = “ 输 入 您 要 统 计 的 字 符:"

----2 . 在 单 击 命 令 按 钮 控 件CommandButton1 后 便 执 行 统 计 工 作, 代 码 如 下:

Private Sub CommandButton1_Click()
Dim countofappear as Integer
Selection.WholeStory
With Selection
   .Find.ClearFormatting
   With .Find
     .Text = UserForm1.TextBox1.Text
     If UserForm1.CheckBox1.Value = True Then
      .MatchCase = True
    Else
     .MatchCase = False
    End If
   .Execute
  End With
End With
If Not Selection.Find.Found() Then
  MsgBox “ 未 找 到"
  Exit Sub
End If
While Selection.Find.Found()
   countofappear = countofappear + 1
   Selection.Find.Execute
Wend
MsgBox “ 找 到 了" & countofappear & “ 个"
End Sub

----讲 解: 首 先 用 语 句Selection.WholeStory 选 定 全 文。

----使 用Selection.find.execute 语 句 进 行 一 次 对 字 符 的 查 找 操 作, 如 下:

With Selection
   .Find.ClearFormatting
   With .Find
     .Text = UserForm1.TextBox1.Text
     If UserForm1.CheckBox1.Value = True Then
      .MatchCase = True
    Else
     .MatchCase = False
    End If
   .Execute
  End With
End With

----上 述 语 句 中 使 用Find 对 象 的ClearFormatting 方 法 作 用 是 清 除 任 何 为 进 行 查 找 或 替 换 操 作 所 指 定 的 格 式, 相 当 于“ 编 辑” 菜 单“ 查 找 和 替 换” 对 话 框 中 的“ 不 限 定 格 式” 按 钮。

----另 外,MatchCase 属 性 设 置 查 找 操 作 是 否 区 分 大 小 写。

----如 果 没 有 找 到, 则 弹 出 一 消 息 框, 告 知 没 有 找 到, 并 退 出 子 程 序, 语 句 为:

If Not Selection.Find.Found() Then
MsgBox “ 未 找 到"
Exit Sub
End If

----如 果 找 到 一 处, 然 后 进 行 下 一 次 查 找, 以 下 如 此 循 环, 每 找 到 一 次countofappear 变 量 便 加1, 来 代 表 指 定 字 符 在 文 档 中 出 现 的 次 数, 语 句 为:

While Selection.Find.Found()
   countofappear = countofappear + 1
   Selection.Find.Execute
Wend

----在 程 序 中Selection.Find.Found() 函 数 用 来 知 道 是 否 找 到 指 定 的 字 符。

----最 后, 弹 出 一 个 消 息 框 来 告 知 字 符 在 文 档 中 出 现 的 次 数。
 
展开阅读全文

没有更多推荐了,返回首页