零基础学Excel VBA(1)

学 习 编 程 不 要 死 记 语 法: 很 多 初 学 者 试 图 把 各 种 语 法 背 下 来,其 实 这 是 极 其 错 误 的,程 序 开 发 的 语 法、规 范 特 别 多,不 可 能 都 记 得 下 来,你 只 要 知 道 有 这 么 一 个 功 能 就 可 以 了,需 要 的 时 候 翻 阅 书 籍,或 者 查 找 帮 助 文 件,这 样 省 时 省 力。

W3Cschool Excel VBA 编程教程

第 1 章 Excel 高 级 处 理 功 能 的 使 用

数据有效性设置:

  • 选择 A1 的年龄
  • 菜单 数据, 数据工具, 数据验证

菜单, 公式: 然后可以看到分好类的函数。 部分函数:

  • sum
  • average
  • max
  • min
  • lower: 小写
  • upper: 大写
  • TRIM 函 数:删 除 字 符 串 之 间 的 多 余 空 格,但 在 英 文 字 符 串 中 将 保 留 一 个 词 与 词 之 间 的 空 格。单词间的空格会保留 1 个
  • year
  • month
  • day
  • now: 当前系统的日期时间值
  • today

数据透视表的作用: 分类汇总, 排序, 筛选

数 据 透 视 表 为 用 户 提 供 了 数 据 的 三 维 视 图,即 将 用 户 所 需 要 的 数 据 分 别 按 照 3 条 不 同 的 坐 标 轴 进 行 排 列,从 而 达 到 统 计 数 据 信 息 的 要 求。

数 据 透 视 表 实 际 上 是 通 过 二 维 的 视 图 来 表 示 三 维 的 内 部 结 构,下图 中 行 标 签、列 标 签 和 报 表 筛 选 分 别 表 示 三 维 结 构 中 的 X 轴、Y 轴 和 Z 轴,通 过 这 种 表 示 方 法 可 以 显 示 统 计 的 数 据 信 息。

三种图表类型:

  • 线 形 图 表: 用 于 描 述 某 个 区 间 内 或 一 段 时 间 内 数 据 的 变 化 值
  • 饼 形 图 表: 用 于 表 示 各 个 不 同 的 数 据 点,即 将 数 据 信 息 分 成 不 同 的 几 部 分,然 后 将 其 放 在 一 起 进 行 比 较。通 常 情 况 下,饼 形 图 表 采 用 的 是 使 用 扇 形 区 占 整 个 圆 的 百 分 比 的 方 式 进 行 表 示 . 在 使 用 饼 形 图 表 统 计 数 据 信 息 时,不 易 产 生 过 多 的 扇 形 区,否 则 会 使 辨 认 饼 形 图 变 得 很 困 难,用 户 很 难 通 过 饼 形 图 表 表 示 出 所 需 要 的 统 计 结 果。 通 常 情 况 下,在 使 用 饼 形 图 表 时 应 该 将 扇 形 区(数 据 点)控 制 在 7 个 以 内。
  • 柱 形 图 表: 用 柱 形 表 示 数 据 的 一 种 方 式。

在 Excel 中,除 了 这 3 种 类 型 的 图 表 之 外,还 有 很 多 种 类 型 的 图 表,如 曲 面 形、气 泡 形、圆 柱 形 等

第 2 章 Excel VBA 中 的 宏

宏 是 Excel VBA 的 基 础。在 Excel 中,通 过 宏 可 以 自 动 执 行 重 复 的 操 作,有 效 地 帮 助 办 公 人 员 自 动 地 完 成 某 些 重 复 的 工 作。

在 Excel 中,宏 可 以 重 复 执 行 一 系 列 的 操 作。也 就 是 说,只 要 宏 运 行,就 可 以 重 复 执 行 在 Excel 中 的 操 作。

宏 是 被 存 储 在 Visual Basic 模 块 中 的 一 系 列 命 令 和 函 数。在 需 要 执 行 宏 时,宏 可 以 立 刻 被 执 行,简 单 地说,宏 就 是 一 组 动 作 的 组 合。

通 过 宏,可 以 把 每 步 操 作 和 某 些 特 定 的 操 作 记 录 下 来,然 后 将 其 绑 定 到 某 个 按 钮 上,这 样,用 户 只 需 通 过 单 击 该 按 钮 运 行 宏,就 可 以 自 动 完 成 重 复 性 的 操 作,从 而 提 高 了 操 作 人 员 的 工 作 效 率,同 时 也 节 省 了 大 量 的 时 间。

在 Excel 中,制 作 宏 主 要 有 两 种 不 同 的 方 法:录 制 宏 和 编 写 宏。Excel 中 所 有 的 宏 都 是 采 用 这 两 种 方 法 中 的 任 一 种 来 实 现 的。

在 Excel 中,大 部 分 的 操 作 都 可 以 通 过 录 制 宏 的 方 法 得 到 操 作 的 宏 代 码

在 Excel 中,在 工 作 表 中 可 以 添 加 按 钮 或 文 本 框 等 控 件。这 些 控 件 都 被 放 置 在 Excel 的“开 发 工 具”选 项 卡 当 中。在 默 认 的 情 况 下,“开 发 工 具”选 项 卡 隐 藏 在 Excel 环 境 当 中,如 果 想 使 用,需 要 从“Excel 选 项”中 进 行 添 加。

文件菜单, 选项, 自定义功能区, 选中开发工具。

保存带有宏的工作簿: 另存为启用宏的工作簿 (后缀是 xlsm)

宏的部分执行方式:

  • 开发工具 - 宏 - 选中特定的宏 - 执行
  • 关联到按钮执行
  • 给宏设置快捷键, 通过快捷键执行。如 果 在 打 开 的 Excel 工 作 表 中 存 在 宏 及 其 快 捷 键,则 宏 快 捷 键 优 先 于 任 何 同 级 别 的 Excel 的 默 认 快 捷 键。
  • 可 以 将 宏 指 定 到 图 片 上 执 行 宏。通 过 图 片 指 定 宏 的 目 的 是 允 许 用 户 使 用 自 己 的 图 片 按 钮,这 样 使 得 开 发 者 可 以 设 计 出 更 加 漂 亮 的 用 户 界 面。相 同。在 给 添 加 的 图 片 指 定 宏 之 后,其 执 行 宏 效 果 与 单 击 按 钮 执 行 宏 的 效 果 完 全 相 同。
  • 添 加 工 具 栏 命 令 执 行 宏
    • 打 开 带 有宏 的 Excel 工 作 簿。
    • 在 工 具 栏 上 单 击 鼠 标 右 键,在 弹 出 的 快 捷 菜 单 中 选 择“自 定 义 快 速 访 问 工 具 栏”选 项,此 时 将 弹 出“Excel 选 项”对 话 框 中 的“自 定 义”选 项 卡 中 的 内 容
    • 选 项 卡 中 的“从 下 列 位 置 选 择 命 令”下 拉 列 表 中 选 择“宏”选 项,然 后 再 在 其 下 面 的 列 表 中 选 择 要 添 加 到 工 具 栏 中 的 宏

加载宏

加 载 宏 是 一 类 可 选 的、用 于 增 加 Excel 命 令 或 功 能 的 程 序。这 些 功 能 Excel 本 身 并 不 具 有,或 者 没 有 被 加 载 到 Excel 环 境 当 中。当 这 些 宏 被 加 载 之 后,便 可 以 在 打 开 的 Excel 工 作 簿 中 使 用 加 载 宏 所 提 供 的 功 能。

文件, 选项, 加载项:

(以下略)

第 3 章 Excel VBA 及 其 开 发 环 境

说 Excel VBA 是 通 过 用 代 码 编 写 的 命 令 和 使 用 过 程 来 操 作 工 作 表 或 单 元 格 等 对 象,进 而 在 Excel 中 完 成 自 动 化 操 作 的 相 关 设 置。

VBA 采 用 面 向 对 象 技 术 与 各 套 件 集 成 在 一 起,能 很 方 便 地 控 制 其 宿 主,从 而 增 强 宿 主 的 功 能,实 现 用 户 定 制 化 的 便 捷 技 术。

用 来 编 写 Excel VBA 代 码 的 工 具 称 为 Visual Basic Editor(简 称 VBE),VBE 的 窗 口 结 构 和 VB 编 辑 器 极 为 相 似。但 不 同 的 是,VBE 必 须 依 附 于 其 所 支 持 的 应 用 程 序 才 能 够 被 打 开。通 过 VBE 编 写 的 VBA 代 码,被 保 存 在 为 VBA 代 码 所 服 务 的 Excel 文 件 当 中。

VBA 是 面 向 对 象 的 语 言,在 结 构 和 处 理 对 象 方 面 与 VB 是 等 同 的。不 同 的 Office 产 品 在 VBA 中 对 应 不 同 的 对 象 模 型(Object Model)。用 户 必 须 熟 悉 对 象 模 型 才 能 使 用 宏 为 一 种 产 品 编 程。对 象 模 型 是 一 个 产 品 中 左 右 对 象 的 体 系 结 构。如 Excel 产 品 对 应 的 就 是 Excel 对 象 模 型,其 中 包 括 工 作 簿(Workbook)、工 作 表(WorkSheet)和 单 元 格(Cell)等。

从 Excel 97 开 始 模 块 不 再 属 于 工 作 簿 对 象,同 时 在 Excel 程 序 窗 口 中 不 可 显 示。模 块 只 能 在 VBA 的 开 发 环 境 中 才 能 显 示 和 修 改。除 了 标 准 的 模 块、对 象 模 块 被 引 入 之 外,用 户 还 可 以 创创 建 自 己 的 类。

另 外,Excel 97 还 引 入 了 ActiveX 控 件 以 便 支 持 更 多 的 事 件。VBA 编 程 环 境 也 得 到 了 很 大 的 改 进。当 用 户 输 入 代 码 时,系 统 会 自 动 提 示 合 适 的 对 象、参 数 和 函 数 等。

在 Excel 2000 和 Excel 2002 中,微 软 增 强 了 VBA 的 编 程 界 面 以 及 Web 相 关 的 功 能,使 用 户 可 以 简 单 地 通 过 互 联 网 发 布 数 据。Web 已 经 成 为 了 现 代 生 活 不 可 分 割 的 一 部 分。

微 软 在 Excel 2003 以 后 的 版 本 中 提 供 了 大 量 的 对 于 Web 支 持 的 新 功 能。同 时,在 分 析 数 据 对 XML 的 支 持,互 联 网 共 享 工 作 簿 和 用 户 体 验 方 面 都 做 了 大 量 的 改 进。

VBA 是 Office 对 象 和 VBA 程 序 代 码 之 间 相 互 关 联 和 交 流 的 桥 梁。同,当 使 用 VBA 代 码 来 调 用 Office 对 象 时,需 要 有 VBA 程 序 接 口,而 这 种 调 用 是 通 过 对 象 模 型 自 动 化 实 现 的。VBA 的 主 要 任 务 是 通 过 编 写 程 序 代 码 来 操 作 Office 对 象,从 而 完 成 特 定 的 任 务 操 作。当 使 用 VBA 代 码 调 用 Excel 的 某 个 属 性 时,如 果 在 VBE 环 境 中 解 释 执 行 VBA 代 码 时,发 现 有 对 Excel 这 个 属 性 的 调 用,则 自 动 通 过 对 象 模 型 调 用 该 属 性,然 后 通 过 方 法 操 作 该 属 性,这 样 就 实 现 了 VBA 代 码 和 Office 对 象 之 间 的 通 信 连 接。VBA 的 工 作 原 理 如 图:

VBA 程 序 只 可 依 附 于 各 软 件 而 执 行,无 法 制 作 可 执 行 文 件。

进入 VBE:

  • ALT + F11
  • 通 过 单 击“开 发 工 具”选 项 卡 下 的【Visual Basic】命 令 进 入 到 VBE 当 中。
  • 单 击“开 发 工 具”选 项 卡 下 的【宏】按 钮,在 弹 出出 的“宏”对 话 框 窗 口 中 选 择 要 执 行 的“宏”,然 后 单 击 窗 口 中 的【编 辑】按 钮 进 入 到 VBE 当 中

VBE 开 发 环 境 主 要 由 菜 单 及 工 具 栏、工 程 窗 口、属 性 窗 口、代 码 窗 口 和 立 即 窗 口 等 几 部 分 组 成,

工 程 窗 口

VBE 的 工 程 窗 口 中 包 括 工 作 簿、工 作 表、窗 体、模 块、类 模 块 等 对 象。通 常 情 况 下,可 以 将 每 一 个 打 开 的 Excel 工 作 簿 看 作 默 认 名 称 为“VBAProject(工 作 簿 名 称)”的 一 个 工 程。一 个 新 建 的 Excel 工 作 簿 包 含 有 一 个 Excel 对 象,在 默 认 的 情 况 下,该 对 象 中 包 含 工 作 表 对 象 和 工 作 簿 对 象,在 新 建 一 个 工 作 簿 之 后,还 可 以 在 工 程 中 添 加 窗 体、模 块 和 类 模 块 等 对 象

Miscrosoft Excel 对 象 是 Excel VBA 中 最 基 本 的 对 象,在 新 建 一 个 工 作 簿 以 后,该 对 象 就 已 经 存 在。Miscrosoft Excel 对 象 由 工 作 表 对 象 和 ThisWorkbook 对 象 组 成,ThisWorkbook 对 象 表 示 的 是 当 前 工 作 簿 对 象。

窗 体 对 象 窗 体 是 Excel VBA 中 最 重 要 的 对 象,通 过 窗 体 可 以 使 用 户 更 好 地 与 应 用 程 序 进 行 对 话。例 如 通 过 窗 体 查 询 Excel 工 作 表 中 的 数 据、添 加 及 维 护 工 作 表 中 的 数 据 等。

模 块 对 象 模 块 由 变 量 的 声 明 和 过 程 构 成,是 一 些 代 码 的 集 合。过 程 是 一 段 可 以 单 独 运 行 的 代 码 语 句,一 个 模 块 由 多 个 过 程 组 成。例 如 在 一 个 模 块 中,有 执 行 数 据 筛 选 的 过 程,也 有 维 护 数 据 的 过 程。

类 模 块 对 象 类 模 块 允 许 开 发 人 员 开 发 自 己 的 对 象,它 是 一 个 特 殊 的 模 块,只 有 在 开 发 比 较 大 的 应 用 程 序 时 才 会 被 用 到。对 于 Excel VBA 的 初 学 者,简 单 了 解 一 下 类 模 块 即 可。

VBE 代码窗口

代 码 窗 口 的 作 用 是 用 来 编 辑 和 存 储 Excel VBA 程 序 的 代 码,在 工 程 窗 口 中 的 任 何 一 个 对 象 都 有 自 己 的 代 码 窗 口。 例 如 在 VBE 环 境 中 双 击 模 块 名 称,就 可 以 查 看 该 模 块 的 相 关 程 序 代 码,

代 码 窗 口 主 要 由 对 象 列 表 框、边 界 标 识 条、过 程 视 图 按 钮、全 模 块 视 图 按 钮、过 程 列 表 框 和 程 序 分 隔 线 6 部 分 组 成

边 界 标 识 条 的 主 要 作 用 是 显 示 或 设 置 程 序 运 行 时 的 断 点。对 于 编 写 完 成 的 程 序 代 码,经 常 要 通 过 设 置 断 点 进 行 调 试。单 击 代 码 前 面“边 界 标 识 条”的 位 置 可 以 将 该 代 码 处 设 置 为 断 点,这 样,当 程 序 运 行 到 该 断 点 的 位 置 时 将 会 中 断 运 行

很 多 的 Excel VBA 函 数 都 带 有 参 数 信 息,在 VBE 的 代 码 窗 口 中 也 设 置 了 自 动 显 示 参 数 信 息 的 功 能。如 在 代 码 窗 口 中 输 入 "MsgBox" 函 数 之 后,按 下 空 格 键,其 函 数 的 后 面 将 显 示 该 函 数 相 关 的 参 数 信 息

注释: 在 VBE 的 代 码 窗 口 中,可 以 在 需 要 注 释 的 语 句 前 添 加 一 个“'”或 者" Rem",则 被 注 释 的 语 句 就 会 变 成 绿 色,同 时 这 些 语 句 不 参 与 程 序 的 运 行,并 且 对 程 序 的 运 行 也 不 会 产 生 任 何 的 影 响,

对 象 浏 览 器 窗 口 的 作 用 是 为 VBA 编 程 者 提 供 使 用 各 种 对 象 方 法 和 属 性 的 方 法。在 VBE 环 境 中,单 击“视 图”下 的“对 象 浏 览 器”子 菜 单 项 或 者 直 接 按 下 F2 键,将 弹 出 对 象 浏 览 器 窗 口。

VBE 是 Excel VBA 程 序 设 计 的 开 发 环 境,用 户 可 以 按 照 自 己 的 编 程 习 惯 去 设 置 这 个 开 发 环 境。设 置 合 理 的 开 发 环 境,不 但 可 以 加 快 程 序 编 写 的 速 度,而 且 还 可 以 提 高 编 写 代 码 的 正 确 率。自 定 义 VBE 开 发 环 境 是 在 VBE 开 发 环 境 中 的“选 项”窗 口 中 实 现 的。打 开 Excel 工 作 簿,进 入 到 VBE 开 发 环 境 当 中,然 后 选 择“工 具”菜 单 下 的“选 项”子 菜 单,此 时 弹 出“选 项”窗 口

示例程序

Private Sub Workbook_WindowResize(ByVal Wn As Window)
' 在 工 作 簿 改 变 大 小 时, 弹 出 提 示 对 话 框 信 息
Dim ShowMsg, MsgStyle, MsgTitle
' 提 示 信 息 的 内 容
ShowMsg = " 窗 口 大 小 已 改 变!"
' 设 置 提 示 按 钮 的 类 型
MsgStyle = vbOKOnly
' 对 话 框 的 显 示 标 题
MsgTitle = " 提 示 信 息 "
' 显 示 提 示 对 话 框
MsgBox ShowMsg, MsgStyle, MsgTitle

End Sub

第 4 章 Excel VBA 中 的 语 法 结 构

常用对象

在 Excel VBA 众 多 的 对 象 当 中,其 实 读 者 能 够 真 正 用 到 的 也 就 十 几 个,因 此,读 者 在 学 习 Excel VBA 时 只 需 掌 握 一 些 重 要 的 对 象 即 可。

Application 对 象 是 Excel VBA 中 最 重 要 的 对 象。其 代 表 着 整 个 Microsoft Excel 应 用 程 序。

Workbook 对 象 是 用 户 接 触 最 多 的 对 象,Workbook 对 象 指 的 就 是 Excel 工 作 簿。通 常 所 说 的 在 Excel 程 序 中 打 开 一 个 工 作 簿,实 际 上 就 是 指 在 Application 对 象 中 打 开 一 个 Workbook 对 象。

Worksheet 对 象 也 是 Excel VBA 中 最 常 用 的 对 象。Worksheet 对 象 包 含 在 Workbook 对 象 当 中,Worksheet 对 象 实 际 上 就 是 Workbook 对 象 中 独 立 的 一 页。用 户 执 行 的 大 部 分 操 作 都 是 在 Worksheet 对 象 中 完 成 的。例 如,在 一 个 工 作 簿 中 添 加 一 个 工 作 表,就 可 以 看 作 是 使 用 Worksheet 对 象 的 add 方 法 向 Workbook 对 象 中 再 添 加 一 个 Worksheet 对 象。

在 众 多 的 对 象 当 中,Range 对 象 是 使 用 频 率 最 高 的 对 象。在 Excel 中 所 有 的 表 格 操 作 都 是 通 过 Range 对 象 来 完 成 的。例 如,用 户 在 Excel 表 格 中 填 入 数 据,就 可 以 看 作 是 给 Range 对 象 Cell 属 性 的 Value 属 性 赋 值。

Chart 对 象 是 图 表 对 象,主 要 用 于 将 数 据 信 息 通 过 图 表 表 示 出 来。

OOP 思想和方法无处不在啊!

常用对象集合

在 Excel 对 象 中,集 合 是 指 包 含 一 组 相 似 或 者 相 关 对 象 的 对 象。在 对 象 的 集 合 中,可 以 直 接 了 当 地 将 一 组 相 关 的 对 象 看 作 单 一 的 对 象 来 引 用

Workbooks 集 合 表 示 的 是 在 Excel 应 用 程 序 中 打 开 当 前 所 有 的 Workbook 集 合,把 这 些 工 作 簿 当 作 单 一 对 象 处 理 的 好 处 之 一 就 是 可 以 整 体 地 处 理 某 些 在 单 个 文 件 中 无 法 完 成 的 操 作。例 如,可 以 使 用 workbooks 集 合 的 close 方 法 关 闭 所 有 打 开 的 工 作 簿,或 者 使 用 Workbooks 集 合 的 add 方 法 在 集 合 里 再 添 加 一 个 对 象 等。

Worksheets 集 合 表 示 指 定 工 作 簿 或 活 动 工 作 簿 中 所 有 的 Worksheet 对 象。可 用 Worksheets(index)返 回 单 个 Worksheet 对 象,其 中 index 表 示 工 作 表 的 编编 号 或 名 称。

Sheets 集 合 不 但 包 含 指 定 工 作 簿 或 活 动 工 作 簿 中 所 有 的 Workbook 对 象,而 且 还 包 括 chart 对 象。

使用对象的规则

在 大 多 数 编 程 语 言 当 中,对 象 的 使 用 几 乎 都 包 括“设 置 对 象 属 性”、“获 取 对 象 属 性”和“使 用 对 象 的 方 法”这 3 种 方 式。

设置对象属性:

'语法'Object.Propertyname = Value
Sheet1.Visible = xlSheetHidden

获取对象属性:

'语法'Var_Propertyname = Object.Propertyname
Dim GetWorkbook
GetWorkbook = Application.Worksheets.Count
MsgBox" 当 前 工 作 簿 中 有 " + Str(GetWorkbook) +" 个 工 作 表 ",," 提 示 信 息 "

使用对象的方法:

'语法'Object.method
Sheet1. Delete

VBA 基础语法

数据类型

常量

常 量 是 静 态 的 存 储 空 间,当 某 个 数 据 需 要 保 持 不 变 时 可 以 使 用 常 量,常 量 在 程 序 中 不 能 被 修 改。使 用 常 量 可 以 增 加 程 序 的 可 读 性,使 程 序 代 码 看 起 来 更 加 清 晰、明 了。常 量 的 名 称 一 般 用 大 写 字 母 来 表 示,声 明 常 量 使 用 的 是 Const 语 句,语 句 格 式 如 下 所 示。

李俊民。 零基础学 Excel VBA (零基础学编程) (Kindle 位置 1293-1295). 机械工业出版社。 Kindle 版本。

Const 常 量 名 as 数 据 类 型 = 值

在 Excel VBA 的 系 统 内 部 也 规 定 了 很 多 的 常 量,这 些 常 量 可 与 应 用 程 序 的 对 象、方 法 和 属 性 一 起 使 用。例 如,把 窗 体 中 文 本 框 的 背 景 色 设 置 成 青 色,前 景 色 设 置 成 红 色,则 在 VBA 中 实 现 的 语 句 如 下。

TextBox1. BackColor = CYAN
TextBox1. ForeColor = RED

第 1 行 代 码 中 的 CYAN 和 第 2 行 代 码 中 的 RED 都 是 系 统 的 颜 色 常 量,分 别 表 示 青 色 和 红 色。

变量

在 使 用 变 量 之 前 首 先 应 该 对 变 量 进 行 声 明,通 过 声 明 变 量,会 在 用 户 计 算 机 的 内 存 中 建 立 一 个 命 名 的 存 储 位 置。

Dim 变 量 名 as 数 据 类 型
Dim m as Int, n as Int

' 如 果 写 成 下 面 的 形 式 则 表 示 声 明 的 变 量 m 是 变 体 数 据 类 型,n 则 是 Int 型。Dim m, n as Int

在 使 用 Dim 语 句 声 明 变 量 时,如 果 省 略 数 据 类 型,即 写 成“Dim 变 量 名”的 形 式,则 表 示 声 明 的 变 量 为 变 体 类 型(Variant)。

在 程 序 中 使 用 变 量 之 前,首 先 声 明 变 量 的 好 处 在 于,这 样 程 序 运 行 快,内 存 利 用 效 率 高。如 果 没 有 对 变 量 进 行 声 明,默 认 的 变 量 会 耗 费 大 量 的 内 存 来 判 断 它 的 数 值 类 型。

强 制 声 明 变 量:

(1)打 开 Excel 工 作 簿,按 下 Alt + F11 键 进 入 到 VBE 开 发 环 境 当 中,执 行【工 具】→【选 项】命 令,打令,打 开“选 项”窗 口,在“编 辑 器”选 项 卡 中 选 取“要 求 变 量 声 明”选 项

(2)在 模 块 的 代 码 窗 口 的 最 上 部 输 入 "Option Explicit",这 样 也 可 以 要 求 在 本 模 块 内 强 制 进 行 变 量 的 声 明。

变 量 的 生 存 周 期

在 代 码 中 从 使 用 该 变 量 开 始,到 该 变 量 被 计 算 机 从 内 存 中 删 除 为 止 的 这 段 时 间 被 称 为 变 量 的 生 存 周 期。

以 上 所 介 绍 的 Dim、Private 和 Public 声 明 的 变 量,每 次 被 赋 予 的 值 都 会 随 着 程 序 的 运 行 结 束 而 被 清 除,即 每 次 运 行 变 量 被 赋 予 的 值 都 不 能 被 永 久 地 保 留。

在 实 际 编 程 中,有 时 需 要 变 量 每 次 更 新 的 值 都 能 被 保 留 下 来,直 到 工 作 簿 关 闭,也 就 是 说 使 变 量 及 其 被 赋 予 的 值 在 整 个 程 序 运 行 的 期 间 都 存 在。使 用 Static 声 明 的 变 量 可 以 达 到 以 上 的 要 求,具 体 声 明 的 语 法 格 式 如 下 所 示。

Static 变 量 名 as 数 据 类 型

变 量 转 换 函 数

数据运算

常 用 的 算 术 运 算 符:

运算符优先级:

比 较 运 算 符 的 说 明 与 功 能:

比较运算符优先级;

连 接 运 算 符

连 接 运 算 符 分 为 强 制 字 符 连 接 运 算 符 和 混 合 连 接 运 算 符 两 种。

强 制 字 符 连 接 运 算 符 指 的 是“&”运 算 符。其 主 要 用 来 将 两 个 表 达 式 强 制 作 为 字 符 串 进 行 连 接。

强 制 字 符 连 接 运 算 符 的 语 法 结 构 如 下 所 示。

Result = expression1& expression2

混 合 连 接 运 算 符 指 的 是“+”运 算 符。混 合 连 接 运 算 符 运 用 灵 活,其 语 法 结 构 如 下 所 示。

Result = expression1 + expression2

混合连 接 运 算 符 结 果 的 类 型 是 根 据 表 达 式 的 类 型 来 决 定 的。连 接 运 算 符 的 常 用 规 则 如 下 所 示。混合连接主要是数值, 字符串,null,Variant 等的组合

  • 如 果 两 个 表 达 式 都 是 数 值 数 据 类 型, 那 么 这 两 个 表 达 式 相 加。
  • 如 果 两 个 表 达 式 都 是 String 数 据 类 型,那 么 两 个 表 达 式 相 连 接。
  • 如 果 一 个 表 达 式 是 数 值 数 据 类 型,而 另 一 个 表 达 式 是 Null 之 外 的 任 意 Variant,那 么 这 两 个 表 达 式 相 加。
  • 如 果 一 个 表 达 式 是 String 数 据 类 型,而 另 一 个 则 是 Null 之 外 的 任 意 Variant,那 么 这 两 个 表 达 式 将 连 接。
  • 如 果 一 个 表 达 式 是 数 值 数 据 类 型,而 另 一 个 表 达 式 则 是 String 数 据 类 型,那 么 会 产 生 一 个 不 匹 配 的 错 误。
  • 如 果 两 个 表 达 式 都 是 Null,那 么 结 果 也 是 Null。

逻 辑 运 算 符

逻 辑 运 算 符 包 括 逻 辑 与(AND)运 算 符 和 逻 辑 或(OR)运 算 符 两 种。

逻 辑 与(AND)运 算 符 表 示 的 是 返 回 的 结 果 是 既 符 合 条 件 1 又 符 合 条 件 2 数 据,其 语 法 结结 构 如 下 所 示。

Result = expression1 and expression2

逻 辑 或(OR)运 算 符 表 示 的 是 返 回 的 结 果 是 符 合 条 件 1 或 者 符 合 条 件 2 的 数 据。其 语 法 结 构 如 下 所 示。

Result = expression1 or expression2

常 用 控 制 语 句

if 语句

在 VBA 开 发 环 境 中,If 语 句 主 要 有 以 下 4 种 情 况 的 语 法 结 构。

  • If condition Then[statements]
  • If condition Then[statements] Else[statements]
  • If condition Then[statements] Else[statements] End If
  • If condition Then[statements] ElseIf conditionn Then[statements]…… Else[statements] End If

VBA 代码提示: CTRL + J

Sub button_add_sheet()
    If Application.Worksheets.Count <= 3 Then
    ' 在当前工作簿中添加一个 sheet 对象
    Dim sh As Object
    Set sh = Sheets.Add
    sh.Name = "new sheet"
    End If
End Sub

else if 结构:

If condition Then 
[statements] 
Else If condition-n Then 
[statements]…… 
Else 
[statements] 
End If

示例:

Sub button_add_sheet()
  ' 激 活 工 作 表 Sheet1
  Worksheets("Sheet1").Activate
  Dim Nums As Integer
  ' 获 取 单 元 格 中 的 内 容
  Nums = Cells(1, 2).Value

  ' 开 始 判 断 成 绩 级 别
  If Nums > 90 And Nums <= 100 Then
    MsgBox " 输 入 成 绩 的 级 别 为: 优 秀!"
  ElseIf Nums > 80 And Nums <= 90 Then
    MsgBox " 输 入 成 绩 的 级 别 为: 良 好!"
  ElseIf Nums >= 60 And Nums <= 80 Then
   MsgBox " 输 入 成 绩 的 级 别 为: 及 格!"
  Else
    MsgBox " 输 入 成 绩 的 级 别 为: 不 及 格!"
  End If
End Sub

嵌套语句:

If condition Then 
    If condition-n Then 
        …… 
    End If 
End If

VBA 代码排版:VBA 代码编辑器(包含 VBA 智能排版插件)

循环语句

在 VBA 中 主 要 有 以 下 3 种 形 式 的 循 环 语 句。

  • Do…… Loop。
  • For…… Next。
  • For Each…… Next。

Do…… Loop 语 句 的 语 句 格 式 如 下 所 示。

Do [{While | Until} condition] 
[statements] 
[Exit Do] 
[statements] 
Loop

语 句 中 的 循 环 条 件 "[{While | Until} condition]" 还 可 以 放 在 Loop 语 句 之 后,即 上 面 的 语 句 还 可 以 写 成 下 面 的 形 式。

Do 
[statements] 
[Exit Do] 
[statements] 
Loop [{While | Until} condition] 

上 面 介 绍 的 两 种 Do…… Loop 语 句 的 书 写 方 式 是 有 区 别 的。

  • 在 第 1 种 书 写 方 式 中,首 先 判 断 循 环 条 件 condition 的 值,如 果 该 值 为 True,然 后 执 行 循 环 语 句 statements,当 执 行 到 condition 值 为 False 时,退 出 循 环;
  • 在 第 2 种 书 写 方 式 中,首 先 执 行 一 次 循 环 语 句 statements,然 后 在 判 断 循 环 条 件 condition 的 值,如 果 该 值 为 True,则 继 续 执 行 循 环 语 句 statements,直 到 condition 值 为 False 时,退 出 循 环。
Sub button_add_sheet()
    ' 激 活 工 作 表 Sheet1
    Worksheets("Sheet1").Activate
    Dim i As Integer
    i = 1
    Do While i < 6
        Cells(1, i) = i
        i = i + 1
    Loop
End Sub

For…… Next 语 句 的 语 法 结 构 如 下 所 示。

For counter = start To end[Step step] 
[statements] 
[Exit For] 
[statements] 
Next[counter]

语 句 中 的 counter 表 示 的 是 循 环 计 数 器 的 数 值 变 量,而 start 和 end 分 别 表 示 counter 的 初 始 值 和 结 束 值。Step 表 示 的 是 counter 的 步 长,其 默 认 值 为 1。

李俊民。 零基础学 Excel VBA (零基础学编程) (Kindle 位置 1614-1615). 机械工业出版社。 Kindle 版本。

For…… Next 语 句 的 运 行 原 理 如 下。

  • (1)在 执 行 For 循 环 时,首 先 设 置 counter 的 值 为 start。
  • (2)判 断 counter 的 值 是 否 大 于 end。如 果 step 的 值 为 正 值,并 且 counter 的 值 大 于 end,则 此 时 退 出 循 环,否 则 执 行 循 环 体 中 的 语 句。
  • (3)counter 或 者 step 的 值 增 加 1。
  • (4)重 复 执 行 步 骤 2 与 步 骤 3,直 到 counter 的 值 大 于 end 时 退 出 循 环。
Sub button_add_sheet()
    ' 激 活 工 作 表 Sheet1
    Worksheets("Sheet1").Activate
    Dim i As Integer
    i = 1
    For i = 1 To 6
        Cells(1, i).Value = i
    Next i
End Sub

For Each…… Next 语 句 主 要 针 对 的 是 具 有 并 列 关 系 元 素 的 集 合,使 用 For Each…… Next 语 句 会 对 集 合 中 每 一 个 元 素 重 复 执 行 一 组 语 句。通 常 在 不 能 确 定 集 合 中 元 素 数 量 的 情 况 下,可 以 使 用 For Each…… Next 语 句。 For Each…… Next 语 句 的 语 句 结 构 如 下 所 示。

For Each element In group 
[statements] 
[Exit For] 
[statements] 
Next[element]

语 句 中 的 element 表 示 的 是 用 来 遍 历 集 合 或 数 组 中中 所 有 元 素 的 变 量 名,group 则 表 示 对 象 集 合 或 数 组 的 名 称。

For Each…… Next 语 句 的 执 行 原 理 如 下:如 果 集 合 中 至 少 有 一 个 元 素,则 会 进 入 到 For Each 块 中 执 行。当 进 入 循 环 时,首 先 会 对 group 中 的 第 1 个 元 素 执 行 循 环 体 中 的 所 有 语 句。当 group 中 所 有 的 元 素 都 执 行 完 之 后,将 退 出 循 环,然 后 从 Next 语 句 之 后 的 语 句 继 续 执 行。

Sub button_add_sheet()
    ' 激 活 工 作 表 Sheet1
    Worksheets("Sheet1").Activate
    Dim i As Integer
    i = 2
    For Each c In Range("a1:d2")
        c.Value = i * 2
    Next c
End Sub

错 误 转 移 语 句

错 误 转 移 语 句 的 作 用 是 当 程 序 出 错 时,将 忽 略 程 序 出 现 的 错 误 或 者 在 出 错 后 将 程 序 转 移 到 指 定 的 位 置 运 行。错 误 转 移 语 句 主 要 有 以 下 两 种 形 式。

  • On Error GoTo
  • On Error Resume Next

On Error GoTo 语 句 用 于 当 程 序 出 现 错 误 时,将 程 序 转 移 到 指 定 的 位 置 运 行,其 实 现 的 语 句 结 构 如 下 所 示。

On Error GoTo 指 定 的 位 置

Sub DeleteSheet()
    ' 删 除 工 作 表
    On Error GoTo LabError
    Sheets("Sheet_not_exist").Delete
    ' 退 出 过 程
    Exit Sub
LabError:
    MsgBox " 指 定 的 工 作 表 不 存 在 或 已 经 被 删 除!", , " 提 示 信 息 "
End Sub

在 LabError 语 句 前 应 该 加 上上 Exit Sub 语 句 来 强 制 退 出 该 过 程,否 则 无 论 是 否 发 生 错 误,都 会 执 行 LabError 后 面 的 语 句。

On Error Resume Next 语 句 的 作 用 是 当 程 序 出 现 错 误 时,程 序 会 忽 略 该 错 误 转 向 下 一 条 语 句 继 续 执 行。On Error Resume Next 语 句 的 语 法 结 构 如 下 所 示。

On Error Resume Next

Sub delete_sheets()
    On Error Resume Next
    Sheets("Sheet_not_exist1").Delete
    Sheets("Sheet_not_exist2").Delete
End Sub

On Error Resume Next 语 句 不 要 经 常 的 使 用,如 果 程 序 中 真 的 存 在 计 算 或 逻 辑 上 的 错 误,一 定 不 要 使 用 On Error Resume Next 语 句 将 出 现 的 错 误 忽 略,否 则 程 序 将 会 出 现 严 重 的 错 误 或 无 法 实 现 预 期 所 要 得 到 的 结 果。

With 语 句

With 语 句 的 主 要 作 用 是 简 化 程 序 的 代 码。当 对 某 一 单 一 的 对 象 或 自 定 义 的 数 据 类 型 执 行 一 系 列 的 语 句 操 作 时,可 以 用 此 语 句 来 减 少 书 写 程 序 的 代 码,从 而 提 高 了 程 序 的 执 行 速 度,With 语 句 的 语 法 结 构 如 下 所 示。

With object 
[statements] …… 
End With 

语 句 中 的 object 表 示 的 是 一 个 对 象 或 一 个 用 户 自 定 义 类 型 的 名 称;statements 则 表 示 要 执 行 在 object 上 的 一 条 或 多 条 语 句。

示 例 实 现 的 是 通 过 使 用 With 语 句 设 置,在 工 作 表 中 显 示 内 容 的 字 体、字 体 颜 色 以 及 字 体 大 小 等 内 容。

在 VBE 环 境 中 的 工 程 窗 口 中 选 中 "ThisWorkbook" 对 象,然 后 双 击 该 对 象 进 入 到 对 象 的 代 码 窗 口 当 中。

在 "ThisWorkbook" 对 象 的 代 码 窗 口 中 输 入 下 面 的 程 序 代 码。

Private Sub workbook_open()
    ' 函数名必须为 workbook_open()
    Worksheets("sheet1").Activate
    ' 填充数据
    For i = 1 To 6
        For j = 1 To 6
            Cells(i, j).Value = i * j
        Next j
    Next i

    With Range("a1:f6")
        ' 设 置 字 体 大 小, 字 体 颜 色 以 及 是 否 斜 体 等 信 息
        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = 6
        End With
        With .Font
            .Size = 18
            .Color = vbRed
            .FontStyle = " Bold Italic"
        End With
    End With

    '等同于'Range(" A1: F6").Borders.LineStyle = xlContinuous
    'Range(" A1: F6").Borders.Weight = xlThin'Range(" A1: F6").Borders.ColorIndex = 6
    'Range(" A1: F6").Font.Size = 18'Range(" A1: F6").Font.Color = vbRed
    'Range(" A1: F6"). Font.FontStyle =" Bold Italic"

End Sub

Select Case 语 句

Select Case 语 句 可 以 根 据 表 达 式 的 值,选 择 执 行 几 组 语 句 中 的 一 种,其 基 本 的 语 法 结 构 如 下 所 示。

Select Case expression 
[Case expressionlist-n] 
[statements-n]…… 
[Case Else] 
[else statements] 
End Select 

代 码 中 各 项 参 数 的 含 义 如 下 所 示。

  • expression 是 必 要 的 参 数,表 示 为 任 何 数 值 或 字 符 串 表 达 式。
  • expressionlist-n 表 示 用 来 制 定 某 个 范 围 或 某 值,供 表 达 式 expression 进 行 选 择 匹 配。
  • statements-n 是 该 组 的 执 行 语 句。
  • Case Else][elsestatements] 用 于 当 Case 子 句 中 所 有 的 条 件 都 不 匹 配 时 执 行。
Sub cases()
    Worksheets("Sheet1").Activate
    Dim Nums As Integer
    Nums = Cells(1, 2).Value


    Select Case Nums
        Case 90 To 100
            MsgBox " 输 入 成 绩 的 级 别 为: 优 秀!"
        Case 80 To 90
            MsgBox " 输 入 成 绩 的 级 别 为: 良 好!"
        Case 60 To 80
            MsgBox " 输 入 成 绩 的 级 别 为: 及 格!"
        Case Else
            MsgBox " 输 入 成 绩 的 级 别 为: 不 及 格!"
    End Select

End Sub
评论(没有评论)