学 习 编 程 不 要 死 记 语 法:很 多 初 学 者 试 图 把 各 种 语 法 背 下 来, 其 实 这 是 极 其 错 误 的, 程 序 开 发 的 语 法、 规 范 特 别 多, 不 可 能 都 记 得 下 来, 你 只 要 知 道 有 这 么 一 个 功 能 就 可 以 了, 需 要 的 时 候 翻 阅 书 籍, 或 者 查 找 帮 助 文 件, 这 样 省 时 省 力。
第 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想象力比知识更重要! 因为知识是有限的, 而想象力概括着世界的一切, 推动着进步, 并且是知识进化的源泉。——爱因斯坦