【VisualBasicApplication】Excel编程

news2024/10/6 16:18:35

VBA

  • Excel的宏与VBA
    • 宏的录制
    • 宏的启动运行
      • 快捷键运行宏:
      • 使用Excel对象运行宏*
  • VBA的数据类型
    • 字符串(String)
    • 整形(Integer)和长整形(Long)
    • 单精度浮点型(Single)和双精度浮点型(Double)
    • 货币型(Currency)
    • 日期型(Date)
    • 变体型(Variant)
    • 布尔型(Boolean)
    • 字节型(Byte)
    • 对象型(Object)
    • 枚举类型
    • 自定义数据类型
  • 变量
    • 变量的隐式声明
    • 变量的作用域
    • 变量的生存周期
  • 常量
    • 直接常量
      • 数值常量
      • 字符常量
      • 日期/时间常量
      • 布尔常量
    • 符号常量
    • 系统常量***
  • VBA的运算符
    • 计算运算符
    • 比较运算符
    • 逻辑运算符
    • 连接运算符:合并字符
  • 数组
    • 声明数组
      • 一维静态数组
      • 二维静态数组
      • 动态数组
  • 注释语句
  • 代码语句的续行符和拼接符
  • VBA的交互对话框**
    • InputBox函数
    • MsgBox函数
    • Print 方法
  • 程序流的条件执行与中断
    • Stop语句
    • End语句
    • 分支语句
      • 循环结构

  • 备注:鉴于VBA语言是基于C语言,在语法语句上十分近似SQL语言。为了尽快地掌握这门面对对象编程的语言,这张笔记会少举例子,多写区别和对比,以便有编程基础的程序员们尽快掌握这门语言

Excel的宏与VBA

– 宏是一系列存储于VisualBasic模块中的命令与函数,它们记录了用户的一段操作,能够在需要时执行以重现用户的操作过程。宏相当于一段记录用户操作的录像,在任何需要的时候可以重现。因此,使用宏是避免大量重复操作,实现操作自动化的好方法。
– Excel具有录制宏的能力,录制完成的宏,将作为VBA程序代码,存储在模块的“代码”窗口(如下图所示)中
在这里插入图片描述

– VBA是针对Office软件的一种程序语言,其能够帮助用户从繁杂的重复工作中解脱出来。录制宏可以直接借助于界面操作完成大部分的代码编写,程序员只需要对宏代码进行修改和优化即可获得最终需要的代码。

宏的录制

1.点击上图中的录制宏按钮
2.对Excel表格中的某对象依次进行若干操作
3.点击下图中的停止录制按钮
在这里插入图片描述

  • 注意事项:
    • 每次录制宏时,使用的是绝对引用,宏中被操作的单元格始终是录制时所选择的单元格
    • 每次录制宏时,都有可能产生一些冗余代码,降低宏的运行效率
    • 录制宏不支持条件判断,也没有分支结构

宏的启动运行

快捷键运行宏:

  • 在VBA编辑器中,代码不能更改宏的快捷键,要在Excel的对话框中可以实现,如下图所示
  • 在这里插入图片描述

使用Excel对象运行宏*

  • 可以使用图片、图形或文本框等对象来作为宏的开关

  • 举例:在文本框(或其他对象)上右击,选择关联菜单中的“指定宏”命令,此时将打开“指定宏”对话框,在对话框中选择列表中的宏,点击“确定”,即可完成关联。
    在这里插入图片描述在这里插入图片描述

VBA的数据类型

字符串(String)

  • 在Excel中,字符串用双引号所框
"这是一组使用双引号括起来的字符串"

这是空字符串:

""

整形(Integer)和长整形(Long)

  • 整形:占据2字节,可以表示-32768~32767之间的数
  • 长整型:占据4字节,可以表示-2147483648~2147483647

单精度浮点型(Single)和双精度浮点型(Double)

  • 单精度浮点型:占据4个字节
  • 双精度浮点型:占据8个字节

货币型(Currency)

  • 占据8个字节的整形数值型

实际操作过程中, 由于某些企业对于货币计量的精度要求极高,存储金额所使用的数据类型可能依然是字符串型

日期型(Date)

  • 占据8个字节的浮点数值形式
  • 日期型数据在使用时必须使用#号所括起来
# January 1, 2023#

变体型(Variant)

  • 变体型数据是一种特殊的数据类型,是一种可变的数据类型,可以存放任何类型的数据

布尔型(Boolean)

  • 只有两个:TRUE和FALSE
  • 当其他数据类型转化为布尔型时,0将传化为False,其他为True
  • 当布尔型转化为其他数据类型时,False转化为0 ,True转化为-1

字节型(Byte)

  • 占用1个字节,表示0~255之间的整数

对象型(Object)

  • 占用4个字节,用来表示应用程序中的对象。在程序中,使用Set语句来将声明为对象型的变量赋值为任何对象的引用

枚举类型

枚举类型是VBA中的一种特殊数据类型,当一个变量只有几种可能的值时,可以将其定为枚举类型。枚举类型的数据时将变量的所有可能值一一列举出来,属于该枚举类型的变量只能取枚举中的某一个值。

  • 枚举类型定义的代码示例:
Public Enum Week
	星期日
	星期一
	星期二
	星期三
	星期四
	星期五
	星期六
End Enum

自定义数据类型

  • 自定义数据类型实际上包含了一个或多个数据元素,换句话说,它就是一个多种数据类型的集合。

自定义数据的语法格式:

Type 数据类型名
	数据类型元素名 As 数据类型
	数据类型元素名 As 数据类型
	数据类型元素名 As 数据类型
	...
End Type
Type myType
	myName As String
	myID As Number
	myBir As Date
End Type
' 在这串代码中,定义了名为myType的自定义数据类型,
' 该数据类型包含了3个数据元素,这三个数据类型的元素分别是String,Number 和Date

Number 是个什么样子的数据类型?刚才也没提到啊

变量

  • 由于VBA是基于C语言所写的高级语言,所以VBA给变量等标识符起名字的规则与其他面对对象编程的语言相差无几。
Dim 变量名 [As 数据类型]
  • 举例:声明多个变量
Dim IntA As Integer, stringB As string , 

变量的隐式声明

  • 强制声明: 避免隐式声明
    用一句前提命令Option Explicit
Option Explicit
...' 剩余代码

变量的作用域

  • 过程级变量:又叫私有变量,声明变量的Dim语句放在Sub过程之内
  • 模块级变量:声明变量的Dim语句放在Sub过程之外
  • 工程级变量:又叫全局变量,声明需要关键字Public,如下代码所示:
Option Explicit
Public myString As String

变量的生存周期

  • 动态变量:假设某变量是动态变量,当程序进入该变量所在的sub过程时,该变量就会被初始化并载入内存;当退出该过程时,该变量占用的内存会被释放,其值也会消失。

  • 静态变量:假设某变量是静态变量,在程序进入该变量所在的sub过程时,该变量会和动态变量一样被初始化,当退出该过程时,该变量占用的内存不会被释放,其值会依然留存在内存中,当再次进入该过程时,变量值可以被重复利用。

  • 无论动态变量还是静态变量,其生存期都会在Excel工作簿关闭后结束

' 静态变量的声明:
Static myString As String 

常量

直接常量

数值常量

Square = 3.14 

字符常量

字符常量需要使用双引号"作为定界符,在字符串中有双引号时,需要用到转义字符:双引号"的转义字符是一个双引号"自己

"我说:""VBA实际上真的很简单!"""

在这里,最后用了三个引号,其中前两个引号将输出一个引号“"”,最后一个引号是这个字符串的右定界符

日期/时间常量

这也是在VBA中很常见的一类常量:用来表示某一天或者某一个时间。与字符常量不同,其需要使用“#”作为定界符

布尔常量

符号常量

  • 对于需要在程序中反复使用的常量,可以为其命名,用一个标识符表示它。符号常量的定义方式如下:
[Public|Private] Const 常量名 [As 数据类型] = 常数表达式

其中,Public声明的是公有常量,Private声明的是私有常量

系统常量***

  • Excel VBA 系统常量是系统内部提供的一系列具有各种不同用途的符号常数。如色彩常数中的vbRed表示红色,显然比用数值0xFF0000要更直观的多

  • 在VBA中,系统常数名常采用大小写混合的格式,其前缀表示定义常数的对象库名,在Excel中,系统常量名通常采用大小写混合的格式,其前缀表示定义常数的对象库名。

  • 在Excel中,系统常量名通常是由小写的xl作为前缀。如设置工作簿显示状态属性的常量xlSheetVisible。VBA系统内部的符号常量通常是由小写vb作为前缀,如定义颜色的常量vbBlack和定义日期的常量vbSaturday等。

Excel VBA 系统常量的查阅:

Visual Basic 编辑器=> 对象浏览器=> 视图=> 搜索需要的系统常量

  • 如下图所示:
  • 在这里插入图片描述

VBA的运算符

计算运算符

  • 斜杠/表示除法
  • 反斜杠\表示整数除法

比较运算符

  • "like"关键字是模式匹配的比较运算符,如下面表达式的运算结果为True
"EFGHIJK" like "*GH*"

其中,* 是通配符,在Excel中,* 表示一个或几个任意字符

逻辑运算符

  • 异或:A Xor B
  • 同或(等价): A Eqv B
  • 蕴含: A Imp B

蕴含是指表达式A为True,表达式B为False时才会返回False,否则其他情况都返回True
** A Imp B 和 B Imp A是不同结果的两种表达式

连接运算符:合并字符

“&”运算符用来强制将两个表达式作为字符串连接起来,如:

"I love" & "VBA"

数组

声明数组

一维静态数组

  • 数组的声明,与变量相同,同样使用Dim、Static、Private或Public语句来实现。
Dim 数组名(上界) As 数据类型
Dim myStrings(15) As String

这里,声明了一个名为myStrings的一维数组,数组中的元素从myStrings(0)开始,一直到myStrings(15),一共包含16个元素

Dim 数组名(下界 to 上界) As 数据类型
Dim myArray(-2 to 8) As String

这里,声明了一个名为myArray的一维数组,数组中的元素从myArray(-2)开始,一直到myStrings(8),一共包含11个元素

二维静态数组

Dim 数组名(第一维上界,第二维上界) As 数据类型
Dim 数组名(第一维下界 to 第一维上界,第二维下界 to 第二维上界) As 数据类型

动态数组

主要分为两步:
1.使用Dim、Static、Private或Public语句来声明一个数组,此时括号内不写上下限,如:

Dim myArray() As Integer

2.在创建数组之后,使用ReDim语句再次对数组进行声明,为数组重新分配内存空间:

ReDim [Preserve] myArray(UBound(myArray)+10)

注意:这里UBound函数用来获取函数的最大下标,如果需要获取最小下标,使用LBound函数

注释语句

VBA提供了两种为代码添加单行注释的方法,如下例所示:

Rem 后面这些文字都是注释
' 后面这些文字都是注释

代码语句的续行符和拼接符

  • 续行符 : “ _”(一个空格一个下划线)
  • 分隔同行的两个不同语句的分隔符: “:”(一个冒号)

VBA的交互对话框**

InputBox函数

  • InputBox函数本质上是一个赋值语句,语法如下:
返回值 = InputBox(Prompt[,Title] [,Default] [,Xpos,Ypos] [,Helpfile,Context])

Prompt : 该参数用于设置对话框中显示的提示信息,最大长度为1024个字符。如果需要在对话框内显示多行字符,可以在文字之间只用回车符 vbCrLf来换行
Title : 该参数用于设置对话框标题栏中显示的字符,其值为字符串型数据。
Default : 默认值
Xpos和Ypos : 这两个参数分别用于设置对话框在屏幕上的位置。
Helpfile: 该参数用于设置对话框的帮助文件
Context: 该参数用于设置对话框的帮助主题编号

MsgBox函数

MsgBox函数有两种使用方法:
1.不返回值的函数调用:只显示某些提示信息。例如:

MsgBox Prompt [,Buttons] [,Title] [,Helpfile,Context]

2.获取返回值的函数,需要将用户点击了哪个按钮告知程序,则可以使用下面的语法格式:

返回值 = MsgBox(Prompt [,Button] [,Title] [,Helpfile] [,Context]) 

其中,Buttons参数决定了按钮的样式,由VBA常数来设置,这些常数的意义如下表所示

常数描述
vbOKOnly0显示 OK 按钮。
vbOKCancel1显示 OK 及 Cancel 按钮。
vbAbortRetryIgnore2显示 Abort、Retry 及 Ignore 按钮。
vbYesNoCancel3显示 Yes、No 及 Cancel 按钮。
vbYesNo4显示 Yes 及 No 按钮。
vbRetryCancel5显示 Retry 及 Cancel 按钮。
vbCritical16显示 Critical Message 图标。
vbQuestion32显示 Warning Query 图标。
vbExclamation48显示 Warning Message 图标。
vbInformation64显示 Information Message 图标。
vbDefaultButton10第一个按钮是缺省值。
vbDefaultButton2256第二个按钮是缺省值。
vbDefaultButton3512第三个按钮是缺省值。
vbDefaultButton4768第四个按钮是缺省值。
vbApplicationModal0应用程序强制返回;应用程序一直被挂起,直到用户对消息框作出响应才继续工作。
vbSystemModal4096系统强制返回;全部应用程序都被挂起,直到用户对消息框作出响应才继续工作。
vbMsgBoxHelpButton16384将Help按钮添加到消息框
vbMsgBoxSetForeground65536指定消息框窗口作为前景窗口
vbMsgBoxRight524288文本为右对齐
vbMsgBoxRtlReading1048576指定文本应为在希伯来和阿拉伯语系统中的从右到左显示
  • VBA 返回值参数查阅表:
常数描述
vbOK1OK
vbCancel2Cancel
vbAbort3Abort
vbRetry4Retry
vbIgnore5Ignore
vbYes6Yes
vbNo7No
  • MsgBox函数应用实例:
MsgBox "这是一个信息提示框",vbYesNoCancel + vbMsgBoxHelpButton + vbExclamation + vbDefaultButton2

在这里插入图片描述

Print 方法

Debug.Print 显示内容

会在Visual Basic编译器的“立即窗口”中直接显示其内容

程序流的条件执行与中断

Stop语句

  • 在程序中使用Stop语句可以使程序在该语句处暂停运行,该语句的作用相当于在该处设置断点。当程序运行到该语句处时,程序将被暂时挂起停止执行,但此时不会造成文件的关闭或变量清楚等情况的发生。暂停的程序可以继续执行,程序将从Stop语句的下一条语句开始执行。
  • Stop语句能够将程序暂时挂起,但在继续运行时需要用户来操作,因此Stop语句常用于程序调试。

实例:使用Stop语句实现逐行显示:

Sub 使用Stop方法() 
	Dim  a As String
	a = InputBox("请输入字符","输入字符")
	Debug.Print Tab(3);a
	Stop
	Debug.Print Tab(2);a;Tab(4);a
	Stop
	Debug.Print Tab(1);a;Tab(3);a;Tab(5);a
End Sub

在这里插入图片描述
在这里插入图片描述
继续点击运行按钮两次:
在这里插入图片描述

End语句

  • 对于VBA来说,停止程序的运行意味着程序的运行被终止并返回VBA编译器,此时将卸载所有被程序打开的窗体。在没有其他程序引用当前程序公共类模块的对象同时也没有代码被执行时,变量被占用的内存将被清空。在VBA中,停止程序运行可以使用End语句来实现。

对于之前本博客所举之案例,大部分Sub过程都只有一个End语句作为结束。特别地,如果代码中存在分支语句时,我们也许会给每一个分支语句的末尾写一个End语句作为结束,这样就有了不止一个End语句。

分支语句

  • 对于多数主流计算机高级语言如C语言,Java语言等都支持程序的分支结构和循环结构,所以这里主要列举关键字,不再强调举例
If 条件表达式1 Then 
	语句块1
	ElseIf 条件表达式2 Then
	语句块2 
	.......
	Else
	语句块 n 
	End If 
  • 类似于SQL中的 “case when”语句,VBA中也有一个“select case”语句;
Select Case 条件表达式
	Case 条件表达式1 
			语句序列1
	Case 条件表达式2
			语句序列2
			.......
	Case Else 
			语句序列n
End Select

循环结构

循环结构的基本语法代码如下

For 循环变量 = 初始值 To 终值 [步长]
	循环体语句
Next [循环变量]

循环变量:该变量为必选参数,用于设置虚幻次数的计数变量名。
初始值:此参数为必选参数,用于设置循环变量的初始值。
终值:该参数为必选参数,用于设置循环变量的终止值。
步长:该参数为可选参数,用于设置循环变量在每次循环后变化的数值

示例:使用For循环计算累加值

Sub 计算指定范围内的累加和()
	Dim a,b
	Dim i As Integer,sum As Double
	' 声明变量,i 为循环变量,sum为每次循环变量获得的和
	a = InputBox("请输入初始值","计算数字的累加和","0")
	' 获取用户输入的初始值和终止值
	b = InputBox("请输入终止值","计算数字的累加和","0")
	sum = 0
	For i = a To b 
			sum = sum + i
	Next 
	MsgBox "从" & a &"到" & b &"的和为" & sum, , "计算数字的累加和" 
	' 显示计算结果
End Sub

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

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

相关文章

3.mysql查询必备sql语句

文章目录1.条件查询 where2. 通配符与模糊查询3. 映射4. 排序 order_by5. 取部分 limit 和offset6. 分组 group by7.左右连表 left outer join ... on8. 联合查询 union1.条件查询 where 表内容: import pymysqlconn pymysql.connect(host127.0.0.1,port3306,u…

向QAbstractItemView子类如:QTreeView、QTableView等子项单元格插入窗体小部件的功能实现(第2种方法)

1.前言工作中经常会遇到这样的需求:向QAbstractItemView子类如QTreeView、QTableView单元格插入窗体小部件,如:进度条、按钮、单行编辑框等。下面链接的系列博文就是讲解如何实现该功能的。《向QAbstractItemView子类如:QTreeView、QTableVie…

LeetCode 2500. 删除每行中的最大值

给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&#…

行为型模式-状态模式

1.概述 【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能…

时序数据处理中的拟合问题

对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…

一起Talk Android吧(第四百七十五回:渐变类视图动画)

文章目录使用方法属性介绍示例代码共用属性各位看官们大家好,上一回中咱们说的例子是"如何使用视图动画",这一回中咱们说的例子是"渐变类视图动画"。闲话休提,言归正转,让我们一起Talk Android吧! 看官们&am…

移动web动画

移动web动画动画动画属性鼠标经过暂停动画多组动画鼠标经过暂停动画多组动画动画 动画最大的特点可以不用鼠标触发,自动的,反复的执行某些动画。 动画使用分为定义和调用: 定义: /* 1. 定义的动画 */ keyframes dance {from {tr…

恶意代码分析实战 12 对抗反汇编

12.1 Lab15-01 问题 这个二进制程序中使用了何种对抗反汇编技术? 首先,使用IDA载入该文件。 我们可以看到这个程序在地址0040100E处存在一个对抗反汇编技术的痕迹。 eax总是被置为零,jz跳转总是被执行。所以我们认为这一行是假冒的call指…

Docker的架构设计

前面我们研究了Docker容器的本质是一个特殊的进程,那么这个特殊进程是如何创建、如何终止的那?也就是说是谁来管理这个容器进程的生命周期的那?在mac操作系统中我们可以通过活动监视器来观察操作系统里面有哪些进程,以及通过活动监…

推荐算法:序列召回

目录 序列召回(一) 序列召回(二) 序列召回(三) 序列召回(四) 序列召回(一) 源自论文:http://arxiv.org/abs/1511.06939 基于GRU的序列召回中通过…

青训营项目实战1

项目实战 实现掘金青训营报名页码的后端部分 需求描述 展示话题(标题、文字描述)和回帖列表 不考虑前端页面实现,仅实现一个本地web服务 话题和回帖数据用文件存储 附加要求: 支持发布帖子 本地id生成要保证不重复 append文件 更…

【ONE·C || 指针】

总言 C语言:指针的使用介绍。 文章目录总言1、指针初阶1.1、是什么1.2、指针和指针类型1.2.1、指针类型介绍1.2.2、作用一:指针解引用1.2.3、作用二:指针整数1.3、野指针1.3.1、野指针是什么1.3.2、为什么存在野指针1.3.3、如何避免野指针1.4…

ReentrantLock从入门到踢门

1. ReentrantLock是什么Lock提供了比synchronized方法和语句更广泛的锁定操作。 更灵活的结构化,并且支持多个相关联的对象Condition。它实现了Lock、Serializable序列化接口。图1 ReentrantLock实现接口图1.1 Lock1.1.1 lock// 获取锁 void lock();1.1.2 lockInter…

SpringMVC -->ant风格的路径 -->占位符 -->获取请求参数 -->@RequestParam

文章目录SpringMVC支持ant风格的路径SpringMVC支持路径中的占位符SpringMVC获取请求参数通过servletAPI获取通过控制器方法的形参获取请求参数RequestParam注解处理请求参数和控制器方法的形参的映射关系代码样例SpringMVC支持ant风格的路径 ?:表示任意的…

爆火微信公众号自定义早安推送,爱她就给她推送

为女朋友打造专属早安推送先上截图电脑端看的效果手机端看的效果一、申请微信公众号测试号二、让他/她扫码关注测试公众号三、新增模板消息四、天气API五、使用 leancloud 部署云函数六、源代码先上截图 电脑端看的效果 手机端看的效果 一、申请微信公众号测试号 https://mp.w…

Kettle(7):插入/更新组件

1 组件介绍 插入/更新组件能够将Kettle抽取的数据,与某个表的数据进行对比,如果数据存在就更新,不存在就插入。 2 需求 修改 t_user中的张三这一行数据,修改age为80 同时,我们想要使用Kettle将 t_user1 中的张三这一…

【编程入门】N种编程语言做个记事本

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记,将更为简化,去掉了网络调用&#xff0…

量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)

文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多,拆开成多个文章,边写边整合~,应该会分成2部分: 第1部分—…

【每日一道智力题】之坤坤猜生日(面试高频)

🚀write in front🚀 📜所属专栏:每日一题 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最…

文本特征工程——下篇

文本特征下篇 针对梯度提升树模型对文本特征进行特征工程,我们需要充分挖掘LabelLabelLabel编码丢失信息,例如上面的名字特征。内部存在非常强的规律,Mr等信息。这些信息反映了性别相关的信息。如果直接进行Label编码就会丢失此类信息&#…