零基础学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
© Licensed under CC BY-NC-SA 4.0

在b进位制中,以数n起头的数出现的机率为logb(n + 1) − logb(n) —— 本福特定律

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!