【数据分析】Excel中使用VBA进行宏编程

目录

  • 0 准备工作
  • 1 VBA简介
    • 1.1 Excel VBA应用程序的构成
    • 1.2 事件驱动
    • 1.3 宏
      • 1.3.1 创建宏
      • 1.3.2 宏安全
  • 2 VBA基础
    • 2.1 注释
    • 2.2 数据类型
      • 2.2.1 基本数据类型
      • 2.2.2 枚举类型
      • 2.2.3 用户自定义数据类型
    • 2.2 变量
    • 2.3 常量
    • 2.4 运算符
    • 2.5 程序结构
    • 2.6 过程
    • 2.7 函数
  • 3 Excel应用程序开发流程
    • 3.1 需求分析
    • 3.2 界面设计
    • 3.3 代码设计
    • 3.4 帮助系统
    • 3.5 系统测试
    • 3.6 应用程序发布
  • 4 常用功能

Microsoft Excel是广泛用于数据处理和分析的工具,而VBA(Visual Basic for Applications)是一种基于Microsoft Visual Basic的编程语言,可用于在Excel中创建自定义宏和自动化任务,控制Excel工作簿、工作表和数据,执行各种操作。这篇博客将介绍如何使用VBA进行Excel宏编程,以提高工作效率和自动化重复任务。

0 准备工作

  1. Excel中主选项卡默认是没有开发工具选项的,需要选择主选项卡文件→选项→自定义功能区,打开Excel中的开发工具面板:
    在这里插入图片描述
    这样,在Excel的主选项卡中就有开发工具选项了:
    在这里插入图片描述

  2. 在开发工具选项卡中选择Visual Basic,进入VBA编辑器(或使用快捷键Alt+F11):
    在这里插入图片描述

  3. 创建新的模块(Module)并开始编写第一个宏:
    在这里插入图片描述

  4. 如,在Excel中显示消息框:

    Sub 显示消息框()MsgBox "欢迎使用VBA宏编程!"
    End Sub
    

    在这里插入图片描述

  5. 编写完成后,保存,使用F5运行或者在开发工具选项卡中选择“运行”来执行宏:
    在这里插入图片描述

  6. 运行结果:
    在这里插入图片描述

1 VBA简介

1.1 Excel VBA应用程序的构成

从开发者角度看,Excel VBA应用程序由工作表、用户窗体、模块和类模块等部分构成。

  • 工作表:用于保存和显示程序的数据,是程序的主体部分。一般先在工作表中制作出特定表格的格式,并设置好样式,再通过VBA代码获取表格中的数据,经过加工处理后将其填写入相应的单元格,供用户进行查看、打印输出等操作。
  • 用户窗体:在Excel VBA应用程序中,除了可使用工作表与用户进行交互外,还可向程序添加用户窗体,用来与用户进行交互操作。使用用户窗体可将用户与工作表中的数据进行隔离,防止数据被意外修改并隐藏工作表中的敏感数据,使限制权限的用户只看到应该操作的数据。
  • 模块:在模块中可保存程序的通用过程,供其他过程调用。例如录制宏的代码就保存在模块中。
  • 类模块:在Excel VBA中,除了可使用系统提供的对象外,还可通过自定义类来创建自定义的对象,自定义的类必须保存在“类模块”中。大多数应用程序都不使用“类模块”。

1.2 事件驱动

VBA 是运行在 Microsoft Office 软件之上,包括 Excel、Word、PPT、Outlook 等,可以用来编写非软件自带的功能的编程语言,不同的是每一个软件具有自己独有的对象,例如 Excel 有单元格对象,Word 有段落对象,PPT 有幻灯片对象。

Office 软件提供丰富的功能接口,VBA 可以调用它们,实现自定义的需求。基本上,能用鼠标和键盘能做的事情,VBA 都能做,它采用了与Windows相似的事件驱动编程方式。

在这种模式下,Windows监视窗口活动或事件信号,这些事件可以是用户鼠标点击或按键操作,也可以是程序控制或其他窗口的操作引发的。通过VBA的事件驱动机制,开发人员可以编写事件过程来处理系统产生的事件,实现特定的功能,如在鼠标点击时打开一个窗口。

与传统的过程化应用程序不同,事件驱动的应用程序中,代码执行路径不是按照预定顺序进行的。相反,代码在响应不同事件时执行不同的片段。这些事件可以由用户、操作系统、其他应用程序的消息触发,甚至是应用程序自身的消息触发。

由于事件顺序无法预测,代码必须对各种执行状态做出假设。为确保这些假设在执行时有效,应用程序的结构需要组织良好。在Excel中使用VBA开发应用程序实质上是编写处理各对象不同事件的代码。

1.3 宏

简单的说,宏就是一段可以运行的 VBA 代码片段。Excel宏使用VBA语言进行编写,通过VBA编写的宏可控制Excel,对Excel的功能进行扩充。

1.3.1 创建宏

Excel提供了两种创建宏的方法:一种方法是利用Excel操作环境中的宏录制器录制用户的操作;另一种方法是使用Visual Basic编辑器编写自己的宏代码。

利用宏录制器可记录用户在Excel中的操作动作,以便自动创建需要的宏,这在不太了解宏命令时是非常方便的。

使用Visual Basic编辑器可以打开已录制的宏,修改其中的命令,也可以在Visual Basic编辑器中直接输入命令创建宏。对于很多无法录制的命令(如创建新的窗体等),使用Visual Basic编辑器创建宏是唯一的方法。

启用录制宏的两种方式:

在这里插入图片描述

在这里插入图片描述

注:宏名不但可以包含字母、数字和下画线,还可以使用中文,但不能包含空格。但名称开头需为字母或下划线,且不能与已有宏重名。

在这里插入图片描述
注:在宏中定义的快捷键将覆盖任何对等的默认的Excel快捷键。

在创建宏之后,可以将宏分配给对象(如按钮、图形、控件和快捷键等),这样执行宏就像单击按钮或按快捷键一样简单。正是由于这种操作方便的特性,使用宏可以方便地扩展Excel的功能。如果不再需要使用宏,可以将其删除。

如果将录制的宏名称设置为“Auto_Open”,则每次打开包含此宏的工作簿时,该宏都会运行。另一种在打开工作簿时自动运行宏的方法是使用Visual Basic编辑器(VBE)在工作簿的Open事件中编写VBA过程。Open事件是一个内置的工作簿事件,它会在每次打开该工作簿时都运行自己的宏代码。如在用户打开工作簿时显示一个“欢迎”对话框,可新建一个模块,在其中输入以下代码:

        Sub Auto_Open()MsgBox ("欢迎使用Excel!")End Sub

保存并关闭该文件,若提示不能保存,则选择“否”后,将文件保存为.xlsm类型即可。
在这里插入图片描述
再次打开该文件时,将会显示“欢迎使用Excel!”的对话框。

1.3.2 宏安全

从Office软件支持宏开始,宏病毒也随之出现。许多病毒经过专门设计,可以利用VBA宏对系统和数据文件进行恶意操作。因此,宏的安全性越来越受到用户的重视。

按照如下步骤设置宏安全性:

  1. Excel选项卡选择文件→选项→信任中心或者选项卡选择开发工具→宏安全
    在这里插入图片描述
  2. 设置宏的安全性为禁用所有宏,并发出通知
    在这里插入图片描述
    四种类型的宏设置:
  • “禁用所有宏,并且不通知”:如果不信任宏,则使用此设置。文档中的所有宏及有关宏的安全警报都被禁用。如果文档具有信任的未签名的宏,则可以将这些文档放在受信任的位置上。受信任的位置中的文档可直接运行,不会由信任中心安全系统进行检查。
  • “禁用所有宏,并发出通知”:这是默认设置。如果想禁用宏,但又希望在存在宏时收到安全警报,则应使用此选项。这样,可以根据具体情况选择何时启用这些宏。
  • “禁用无数字签署的所有宏”:此设置与“禁用所有宏,并发出通知”选项相同。但下面这种情况除外:在宏已由受信任的发行者进行了数字签名时,如果信任发行者,则可以运行宏;如果不信任发行者,将发出通知。这样,可以选择启用那些签名的宏或信任发行者的宏。所有未签名的宏都被禁用,且不发出通知。
  • “启用所有宏(不推荐,可能会运行有潜在危险的代码)”:可以暂时使用此设置,以便允许运行所有宏。因为此设置容易使计算机受到恶意代码的攻击,所以不建议永久使用此设置。

2 VBA基础

2.1 注释

VBA 中的注释以英文单引号 ' 开头,后面接注释的内容。从单引号开始的部分不会被执行。

'我是一行注释

2.2 数据类型

Excel单元格中可以保存处理多种类型的数据,包括数值、日期/时间、文本、货币等。VBA中除了提供这些数据类型之外,还提供字节、布尔和变体数据等类型。

2.2.1 基本数据类型

常见的VBA基本数据类型如下表:

数据类型含义精度范围
Byte字节型0 ~ 255
Integer整型-32,768 ~ 32,767
Long长整型-2,147,483,648 ~ 2,147,483,647
String字符串变长字符串:0 ~ 20亿(231)个字符
定长字符串:1~约64K(216)个字符
Single单精度浮点型在表示负数时: -3.402823E38 ~ -1.401298E-45
在表示正数时: 1.401298E-45 ~ 3.402823E38
Double双精度浮点型在表示负数时: -1.79769313486231E308 ~ -4.94065645841247E-324
在表示正数时: 4.94065645841247E-324 ~ 1.79769313486231E308
Decimal定点数未放置定点数: +/- 79,228,162,514,264,337,593,543,950,335
放置定点数: +/- 7.9228162514264337593543950335
Currency货币型-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Date日期型时间:00:00:00 至 23:59:59
日期: 100-1-1 至 9999-12-31
Boolean逻辑值True 或 False
Variant变体型不限
Object对象型VBA 和 Excel 对象

2.2.2 枚举类型

枚举就是将变量的值逐一列举出来,属于该枚举型的变量只能取列举的某一个值。当一个变量只有几种可能的值时,可以定义为枚举类型(Enum)。

枚举型举例:

Public Enum WorkDays星期日星期一星期二星期三星期四星期五星期六
End Enum

2.2.3 用户自定义数据类型

在VBA中,还可以使用Type语句定义自己的数据类型,其格式如下:

Type 数据类型名数据类型元素名 As 数据类型数据类型元素名 As 数据类型...
End Type

注,自定义数据类型的定义必须放在模块(模块和类模块)的声明部分中。在使用记录类型之前,必须用Type语句进行定义。一般情况下,记录类型在模块中定义,其变量可以出现在工程的任何地方。

2.2 变量

  • 待完成

2.3 常量

  • 待完成

2.4 运算符

  • 待完成

2.5 程序结构

  • 待完成

2.6 过程

  • 待完成

2.7 函数

  • 待完成

3 Excel应用程序开发流程

3.1 需求分析

在进行Excel应用程序开发时,首先需要准确了解用户的需求,需求分析的目的是确定需要完成哪些工作。

需求分析阶段的主要任务如下:

  • 功能需求:给出应用程序必须完成的所有功能。
  • 环境需求:用户的计算机硬件环境、软件环境和Excel的版本等。
  • 界面需求:应用程序的用户界面是直接面对用户的,界面设计是用户能否方便、快捷地操作应用程序的关键之一。在需求分析阶段,应提出界面的需求。
  • 安全保密需求:对客户信息的保密要求应在本阶段进行计划。
  • 用户技术层次:在需求分析阶段,了解用户的技术层次,可为应用程序的开发提供一些辅助信息。

3.2 界面设计

在Excel中进行界面设计的方式主要有以下3种:

  1. 在工作表中添加控件
    在较简单的应用程序中(只需要调用少数几个宏过程),可向工作表中添加按钮或其他控件,接着与宏过程进行绑定即可:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 用户窗体
    用户界面是应用程序的一个重要组成部分。在Excel的应用程序中,用户窗体作为应用程序的用户界面部分,将用户的操作和Excel工作表中的数据隔离开。
    在VBA编辑器中插入一个用户窗体:
    在这里插入图片描述
    使用工具箱(视图→工具箱打开)中的控件设计窗体:
    在这里插入图片描述
  3. 自定义功能区
    功能区是从Excel 2007起新增加的组件,取代了以往版本的菜单和工具栏,可使用XML代码自定义功能区。
    在这里插入图片描述

3.3 代码设计

将用户界面设计好以后,接下来就需要编写界面中各部分的事件代码(如用户窗体中的按钮、功能区中的按钮等)。

在Excel中设计VBA应用程序时,界面设计和代码设计一般是交替进行的,即设计好一个界面后就编写相应的代码。有时也可先录制修改好宏代码,再和工作表或用户窗体中的按钮进行绑定。

3.4 帮助系统

在Windows应用程序中提供了在线电子文档的帮助系统,Excel也可以制作这种帮助系统。
对于小型应用系统,一般不提供帮助系统;但对于一个大型应用系统,提供一个好的帮助系统可让用户更快地理解系统,更快地熟悉系统的功能。

3.5 系统测试

在创建了应用程序之后,必须对其进行测试,测试和调试应用程序所花费的时间可能与开发系统的时间同样多。

对于一个完成开发的应用程序,在设计测试数据时,应尽可能多地考虑到各种不同的情况:不但要使用正常的合乎逻辑的数据去测试应用程序的功能性,还应使用一些可能导致应用程序出错的数据去测试应用程序的健壮性。

在设计测试数据的同时应编写出测试数据的结果,并与应用程序进行实测时得到的数据进行对比,如果结果相同,则通过测试;否则,应检查并修改应用程序。

3.6 应用程序发布

通过测试后的应用程序就可以发布给最终用户使用了。在发布时需要注意以下3个问题:

  1. Excel版本:如果是在Excel特定版本环境下开发的应用程序,并使用了该特定版本的一些新功能,就要求用户使用该Excel的特定版本。
  2. 动态链接库:如果应用程序中使用了ActiveX控件,则需要考虑是否要将包含该ActiveX控件的DLL文件(或OCX文件)包含在应用程序中予以发布。
  3. 辅助文件:在一个大型的应用程序中,有时可能还会使用到其他辅助文件(如图片文件、数据库文件和帮助文件等),需要将这些文件包括在发布文件中,并且最好将其发布到其他盘符中进行测试,以检查在VBA代码中是否使用了绝对路径来引用相关的文件。

4 常用功能

  • 待完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Apollo CyberRT】源码分析之 “component” 模块

代码位置 apollo/cyber/component 功能 在自动驾驶系统中,模块(如感知、定位、控制系统等)在 Cyber ​​RT 下以 Component 的形式存在。不同 Component 之间通过 Channel 进行通信。Component 概念不仅解耦了模块,还为将模块拆…

实现图片分块化(使用einops库)

背景介绍 在进行机器学习的模型训练任务的时候,针对图像数据集的处理,常常会对数据集进行分块的操作;具体到模型结构中,在ViT框架中,把每一个图像看作是一个的patch,每一个patch可以当作是一个NLP领域的一…

mac上搭建hbase伪集群

1. 前言 之前我们已经搭建过了 hbase单点环境,(单机版搭建参见: https://blog.csdn.net/a15835774652/article/details/135569456) 但是 为了模拟一把集群环境 我们还是尝试搭建一个伪集群版 2. 环境准备 jdk环境 1.8hdfs (hadoop环境 可选…

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2)

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin(2) 在 Android ScaleGestureDetector检测双指缩放Bitmap基于Matrix动画移动到双指捏合中心点ImageView区域中心,Kotlin-CSDN博客 …

程序员开发要素—Java篇

这是个预留板块,打算写一写作为程序员的基本要素和技术。主要包含基本工具,基础知识,基础插件应用,环境搭建等内容。 具体内容后续补充完整,Ps:请假申请已提交https://blog.csdn.net/qq_18237141/article/…

跟着小德学C++之TOTP

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界…

网络安全B模块(笔记详解)- 越权与下载

1.使用渗透机场景kali中工具扫描服务器场景,将web端口号当作Flag提交; 2.使用渗透机场景windows7访问服务器场景mingling.php,将页面中的Flag提交; 3.使用渗透机场景windows7访问服务器场景mingling.php,分析页面内容,查看系统配置信息,并将产品id的最后5位数作为Flag提…

NLP自然语言处理的发展:从初创到人工智能的里程碑

自然语言处理(Natural Language Processing,NLP)人工智能领域中备受关注的重要分支之一。它使得计算机能够理解、解释和使用人类语言。随着技术的不断发展,NLP经历了从初创时期到深度学习时代的巨大演变,推动了互联网产…

链表相加---链表OJ---两数之和

https://leetcode.cn/problems/add-two-numbers/?envType=study-plan-v2&envId=top-100-liked 对于本题,可以选择用数组实现,那样比较简单;我们这里就用纯链表实现。 纯链表实现有许多细节,比如链表长度不一样,进位,尾结点如果是0我们就要删除尾结点。 首先…

线程调度(Java Android)

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览2.1、线程的属性 三、…

继承基本介绍

Java提供了关键字extends,可以让一个类和另一个类建立父子关系。 public class a extends b{ //b为父类,,a为子类} 继承的特点:子类可以继承父类的非私有成员;子类的对象由子类、父类共同完成 使用继承可以减少重复…

【正点原子STM32】STM32基础知识(F1F4F7H7 STM32系统框架、寻址范围、存储器映射的存储器功能划分、寄存器映射)

一、STM32系统框架 1.1、Cortex M内核 & 芯片1.2、F1系统架构1.3、F4系统架构1.4、F7系统架构1.5、H7系统架构 二、STM32的寻址范围? 三、存储器映射 存储器功能划分(F1为例)STM32F1存储器映射图 四、寄存器映射 寄存器基础知识STM3…

python-自动化篇-办公-文件-加解密

解说 要使⽤Python进⾏⽂件的加密和解密,可以使⽤第三⽅加密库,如cryptography或pycryptodome。 ⼀个基本的⽰例,演⽰如何使⽤cryptography库对⽂件进⾏加密和解密: 安装cryptography库: pip install cryptography⽂…

【Vue3 + Vite】Vite搭建 项目解构 Vue快速学习 第一期

文章目录 Vue3介绍Vue3通过Vite实现工程化:一、Vite创建Vue3工程化项目1.1 ViteVue3项目的创建、启动、停止1.2 ViteVue3项目的目录结构 二、ViteVue3 项目组件(SFC入门)2.1 什么是VUE的组件 ?2.2 什么是.vue文件 ?2.3 工程化vue项目如何组织这些组件? 三、ViteV…

【NodeJS】004- NodeJS的模块化与包管理工具

模块化 1. 介绍 1.1.什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则(规范)拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块 ,模块的内部数据是私有的,不过模块可以暴露内部数据以便其他模块使用 1.2 什么是模块化项目 ? 编码时是按照模…

23. 集合类

集合 1. 概述2. 分类2.1 单列集合(Collection)2.2 双列集合(Map) 单列集合 Collection、List、Set、ArrayList、LinkedList’、Vector、HashSet、TreeSet、LinkedHashSet双列集合 Map、HashTable、HashMap、TreeMap、Properties、…

docker 部署及命令

一、容器概述 1、为什么要用到容器? ①容器可以屏蔽底层操作系统的差异性,让业务应用不管在哪里都是使用容器的环境运行,从而保证开发测试环境与生产环境的一致性 ②容器部署起来非常便捷和迅速,缩短开发测试部署的周期时间 2…

阅读go语言工具源码系列之gopacket(谷歌出品)----第二集 layers-巧妙的抽象与无聊的协议包

上一集中我们讲到了wpcap.dll的go封装方法,对于linux系统下libpcap的go封装采用的是常用的cgo方式,想了解的可以看看pcap文件夹中的pcap_unix.go。 我们得到了wpcap.dll的go调用,就可以利用它来进行列举所有网络设备,例如以下代码…

知识产权如何转为实缴资本,实操

网上已传疯了,相关部门要求企业注册资本认缴的必须在5年内完成实缴,这一下子引起企业老板们着急了。以前公司注册时,很多老板因为是认缴资本,完全凭脑袋一拍,写上注册资金5000万,有的甚至写上几个小目标。现…

11.Elasticsearch应用(十一)

Elasticsearch应用(十一) 1.什么是自动补全 现代的搜索引擎,一般都会提供Suggest as you type的功能 帮助用户在输入搜索的过程中,进行自动补全或者纠错。通过协助用户输入更加精准的关键词,提高后续搜索阶段文档的…