VBA(学习笔记)

1. 数据类型

变量定义:Dim 变量名 As 数据类型

变量赋值:变量名 = 值

1.1 数值型

1.1.1 整数

(1) Byte1字节(0~255)

(2) Integer2字节(-32768~32767)

(3) Long4字节(-2147483648~2147483647)

1.1.2 小数

(1) Single7位有效整数加小数 // 整数为0可含7位小数,第8位四舍五入

(2) Double15位有效整数加小数 // 第16位四舍五入

1.2 字符型

(1) String // 变量名 = "abc"

1.3 日期型

(1) Date // Dim d As Date     // d = Date  系统日期, d = Time 系统时间

1.4 数组

(1) 一维数组:Dim 数组名(开始下标含 To 终止下标含) As 数据类型 // Dim arr(1 To 5) As Byte

(2) 二位数组:Dim 数组名(下标 To 下标, 下标 To 下标) As 数据类型 // Dim arr(0 To 3, 0 To 2) As ..

(3) 动态数组:Dim 数组名() As 数据类型  // ReDim 数组名(下标 To 变量)

注释:数组赋值  数组(下标)=值,数组取值  数组(下标),开始下标随意指定可以是0也可是1

2. 运算符

(1) 算术运算符:加( + ),减( - ),乘( * ),除( / ),余( Mod ) // 5 Mod 2

(2) 赋值运算符:=  // vba不识别 += 运算

(3) 比较运算符:等( = ),不等( <> ),大于( > ),大等( >= ),小于( < ),小等( <= )

注释:Like // 变量 like "abc"  ("a*" 多字符,"a?"单字符,"a#"单数字),Is // Range("A1") Is Range("B1") 

(4) 逻辑运算符:AndOrNot

3. 流程控制

3.1 分歧

(1) If分歧:If 条件 Then ... [ElseIf 条件 Then ...] [Else ...] End If

(2) Select分歧:Select Case 变量  Case 变量 = 值 ... [...] Case Else ... End Select

 

3.2 循环

(1) for 循环:For 变量 = 初值 To 终值 ... Next 变量 // For i = 0 To 5 ... Next i

(2) for each 循环:For Each 变量 In 区域 ... Next // For Each i in Range("A1:B2") ... Next

(3) while 循环:Do While 条件 ... 变量=变量+1 Loop // 先判断后循环

(4) do while 循环:Do ... 变量=变量+1 Loop While 条件 // 先处理后判断

注释:退出循环 Exit For, Exit Do 

4. 函数

注释:内置函数用 (vba.函数名)

4.1 函数

4.1.1 判断函数

(1) 数值判断:VBA.IsNumeric(变量 // 判断变量内容是否为数值,可判断字符串

(2) 判断初始化:VBA.IsEmpty(变量 // 判断变量是否初始化(Dim定义或赋值都为False)

(3) 判断空变量:VBA.IsNull(变量) //  判断变量的值是否为Null

4.1.2 数值函数

4.1.3 字符函数

(1) 字符串拼接(+):"a"+"b"="ab" // 符号两侧与变量用空格分割,1+1=2,"1"+1=2,1+"1"=2,"1"+"1"=2

(2) 字符串拼接(&):"a"+"b"="ab" 推荐使用 // 符号两侧与变量用空格分割,1+1="11","1"+1="11",1+"1"="11","1"+"1"="11"

(3) 取字符长度:Len(变量 // 获取字符长度 Len("a啊") = 2

(4) 截取字符:Left(变量, 长度) | Right(变量, 长度 // 从一侧获取指定长度的字符串 

4.1.4 日期函数

(1) 系统日期:Date  //  "2024/3/9",Date + 1 = 加1天,

(2) 系统时间:Time // "23:48:32"

(3) 系统日期时间:Now // "2024/3/9 23:48:32",Now + 1 = 加1天,

4.1.5 函数定义与调用

(1) 无返回值函数:Sub 函数名([ByVal a As 类型, ...]) ... End Sub // 参数(ByVal a As String)

(2) Sub调用:Call 函数名([参数])

(3) 有返回值函数:Function 函数名([ByVal a As 类型]) As 返回值类型 ... End Function  

(4) Function调用:变量函数名([参数]) // 无参函数  函数名 或 函数名() 都识别

注释:function 返回值设定,函数名同名变量=值

4.2 正则表达式

Dim reg as Object
set reg = CreateObject("VBScript.RegExp")
with reg.Global=True '全部匹配.ignorecase = True '不区分大小写.Pattern = "正则"set mc = .Execute("匹配源文本")xx=mc(0) '取第一个匹配结果for each item in mc '多结果获取'…next item
end with

 

5. 宏录制

简单操作可通过录制宏完成 

点击【录制宏】,执行拖动,光标移动,复制粘贴等操作,【结束录制 】。

注释:ctrl+上下做有内容的光标移动,当上下左右移动光标时,需打开【使用相对引用】使相对于当前光标做上下左右,而不是直接跳转到指定单元格。

点击【宏】,选取好光标位置后,执行宏命令。

6. 文件

脚本打开本地excel文件

Sub test()Dim OpenFilename As String
OpenFilename = Application.GetOpenFilename("MicrosoftExcelbook, *.xlsx")
If OpenFilename <> "False" ThenOn Error Resume NextWorkbooks.Open OpenFilenameOn Error GoTo 0
End IfEnd Sub

7. 工作簿

工作簿 》 工作表 》多单元格(行,列,区域)》 单元格

7.1 工作簿

7.1.1 工作簿操作

(1) 选中工作簿:Workbooks("xx.xlsx").Worksheets("xx").Range("A1") //指定工作簿区域取值赋值

(2) 保存工作簿:ActiveWorkbook.Save // If Not ActiveWorkbook.Saved Then ActiveWorkbook.Save End If

7.1.2 工作簿事件

打开工作簿(Open),添加工作表(NewSheet),删除工作表(SheetBeforeDelete),选取工作表(SheetActivate),内容输入(BeforePrint),双击工作表(SheetBeforeDoubleClick),右击工作表(SheetBeforeRightClick),保存(BeforeSave),关闭(BeforeClose)

7.2 工作表

注释:默认当前工作簿,也可指定工作簿 Workbooks("xx.xlsx").

7.2.1 工作表操作

(1) 选中工作表:Worksheets("sheet名" | 1开始下标).Select 

(2) 添加工作表:Worksheets.add // 添加到开头

7.2.2 工作表事件

删除工作表(BeforeDelete)选取工作表(Activate),双击工作表(BeforeDoubleClick),右击工作表(BeforeRightClick),单元格变更(Change),选择区域变化(SelectionChange)

7.3 单元格

注释:默认当前工作表,也可指定工作表 Worksheets("名").

7.3.1 区域单元格

(1) 连续区域选中:Range("A1:C3").Select // 选中A1到C3所有单元格

(2) 间断区域选中:Range("A1,C3").Select // 选中A1与C3单元格,Range("A1").Select 单选

(3) 光标移动:Range("A1").End(xlUp).Select // xlUp 最上(ctrl+↑),xlDown 最下,xlToLeft 最左,xlRight 最右

(4) 区域光标偏移:Range("C1:D2").Offset(1, 1).Select // 向下向左偏移,负数向上向右

7.3.2 行

(1) 全工作表行选中:Rows.Select

(2) 多行选中:Rows("3:5").Select // 选中第3行到第5行

(3) 单行选中:Rows(2).Select  // 指定行号。Rows("3:4").Rows(1).Select 选中多行中的第几行

(4) 获取行号:Rows(Rows.Count).End(xlUp).Row // 首列由下到上,第一个有值单元格行号

(5) 删除行:Rows(3).delete // 下边行上移

7.3.3 列

(1) 全工作表列选中:Columns.Select

(2) 多列选中:Columns("D:F").Select // 选中D列到F列

(3) 单列选中:Columns("D" | 2).Select // 指定列名 或 列号选中

(4) 获取列号:Columns(Columns.Count).End(xlToLeft).Column // 获取数值

(5) 删除列: Columns(3).delete // 右边列左移

7.3.4 单元格

(1) 选中单元格:Cells(行数, 列数).Select // Cells(1,1).Select 选中1行1列

(2) 选中单元格:Cells(行数, "列字母").Select // Cells(1, "B").Select 选中1行B列

(3) 选中单元格:[B2].Select  // 选中指定名字的单元格 

(4) 获取行号或列号:Cells(1,1).Row  | Cells(1,1).Column

7.3.5 通用操作

对象:Range,Rows,Columns,Cells

(1) 单元格赋值:对象.Value =  // 直接单元格的值,光标不变

(2) 自动调整行高:对象.EntireRow.AutoFit

(3) 自动调整列宽:对象.EntireColumn.AutoFit 

7.3.6 单元格样式

对象:Range,Rows,Columns,Cells

(1) 获取对象:Set 变量 = Range("A2:D3") | Rows(1) | Columns(1) | Cells(1,1)

(2) 合并单元格:变量 .Merge

(3) 对齐:变量 .HorizontalAlignment = xlCenter // 居中,xlLeft, xlRight

(3) 字号:变量 .Font.size =

(5) 字体颜色:变量 .Font.ColorIndex = 1 // 黑色(1)

(6) 字体加粗:变量 .Font.Blod = True

(7) 背景色:变量 .Interior.ColorIndex = 1 // 黑色(1)

(8) 边框:变量.Borders.LineStyle = True 

8. 窗体

8.1 窗体

(1) 显示窗体:窗口名.Show 

8.2 控件

8.2.1 标签(Label)

(1) 标签文本:Label名.Caption = "文本内容"

(2) 标签显示:Label名.Visible = True // True显示, False不显示

(3) 指向提示:Label名.ControlTipText

注释:背景色(BackColor),字体(Font),字体颜色(ForeColor) ...

事件:ClickDblClickMouseDownMouseUpMouseMove 

8.2.2 文本框(TextBox)

(1) 文本框内容:TextBox名.Value = "内容"  | TextBox名.Text = "内容"

(2) 文本框显示:TextBox名.Visible = True

(3) 文本框活性:TextBox名.Enabled = True // True 可入力,False不可入力

注释:背景色(BackColor),字体(Font),字体颜色(ForeColor) ...

事件:ChangeDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.3 下拉框(ComboBox)

(1) 文本框取值:ComboBox名.Value  // 获取当前选择的值

(2) 文本框添加项目:ComboBox名.AddItem

(3) 清空文本框:ComboBox名.Clear

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ...

事件:ChangeClickDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.4  列表框(ListBox)

(1) 列表框取值:ListBox名.Value  // 获取当前选择的值

(2) 列表框添加项目:ListBox名.AddItem

(3) 获取选中状态:ListBox名.Selected(0开始下标) // True选中,False未选中,赋值改变状态

(4) 获取总件数:ListBox名.ListCount

(5) 清空列表框:ListBox名.Clear

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ... 

事件:ChangeClickDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.5 复选框(CheckBox)

分组名:GroupName相同为一组

(1) 列表框取值:CheckBox名.Value  // 获取当前复选框是否选中

(2) 列表框赋值:CheckBox​​​​​​​​​​​​​​名.Value  = True // True选中,False未选中

(3) 文本信息:CheckBox​​​​​​​​​​​​​​名.Caption 

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ... 

事件:ChangeClickDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.6 单选框(OptionButton)

分组名:GroupName相同为一组 

(1) 列表框取值:OptionButton​​​​​​​名.Value  // 获取当前复选框是否选中

(2) 列表框赋值:OptionButton​​​​​​​​​​​​​​名.Value  = True // True选中,False未选中

(3) 文本信息:OptionButton​​​​​​​​​​​​​​名.Caption  

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ... 

事件:ChangeClickDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.7 按钮(CommandButton)

(1) 按钮显示名:CommandButton​​​​​​​​​​​​​​名.Caption  

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ... 

事件:ChangeClickDblClickMouseDownMouseUpMouseMove,KeyDown,KeyUp,KeyPress

8.2.8 框架(Frame)

(1) 框架标题:Frame.Caption  

注释:显示(Visible),活性(Enabled),字体(Font),字体颜色(ForeColor) ... 

8.2.9 其它

(1) 图片:Image

(2) 多页:Page  // 多个Tag页

9. 开发环境

调出菜单:打开Excel > 文件 > 选项 > 自定义功能区 > 勾选右侧【开发工具】选项 

开发工具:Excel菜单栏 > 开发工具 >  点击【Visual Basic】

注释:'注释内容   // 单引号后为注释内容

控制台输出:Debug.Print log内容  // ctrl+G或窗口(i)打开 控制台

弹窗信息:MsgBox "弹窗信息"

输入窗口:变量 = InputBox("提示信息", "窗口标题", "入力默认值", 显示器x坐标, 显示器y坐标)

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

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

相关文章

【网络应用层协议】【MQTT】详解消息队列遥测传输协议MQTT(超详细)

目录 1. MQTT 协议简介 2. MQTT 的特点 3. MQTT 协议原理 4. MQTT协议中的订阅、主题、会话 1. MQTT 协议简介 MQTT&#xff08; Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议 &#xff09;是一种消息列队传输协议&#xff0c;采用订阅、发布机制&…

arcgis栅格数据处理3——定义投影(同样适用于其他类型文件)

进行数据连接时可能出现未设置投影无法链接的情况&#xff0c;需要先定义投影 点击最右侧“目录”&#xff0c;弹出带有系统工具的面板&#xff0c;点击“data management tools”点击“投影”&#xff0c;“定义投影”

Redis的缓存穿透?缓存击穿?缓存雪崩?

缓存穿透 什么是缓存穿透&#xff1f; 假如我们有一个学生表一共有10条数据&#xff0c;对应的id为1-10。我们有一个请求是通过id去查询学生的信息。正常的流程是请求先到redis里面去找&#xff0c;如果命中就将查询到的结果反回&#xff0c;如果没有就去mysql数据库中找&…

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先&#xff0c;ChatGPT是一种基于人工智能技术的计算机程序&#xff0c;通过机器学习和自然语言处理等技术&#xff0c;从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作&#xff0c;能够迅速处理和检索信息&a…

OpenCV(六)——对于图片的算术运行、图片的叠加操作、多通道图像拆分为多个单通道图像

在OpenCV中&#xff0c;可以对于图片进行算法运算。我们知道&#xff0c;图像的本质其实就是矩阵&#xff0c;因此对于图像的算数运算本质上就是对于矩阵的算术运算。在OpenCV可以对图像进行算术运算的操作有加、减、乘、除等操作。 图像的加、减、乘、除操作 两张图像可以进…

微信小程序开发系列(二十六)·小程序运行机制(启动、前后台状态、挂起、销毁)和小程序更新机制

目录 1. 小程序运行机制 1.1 启动 1.2 前台和后台状态 1.3 挂起 1.4 销毁 2. 小程序更新机制 1. 小程序运行机制 1.1 启动 小程序启动可以分为两种情况&#xff0c;一种是冷启动&#xff0c;一种是热启动。 冷启动&#xff1a;如果用户首次打开&#xff0c;或小…

数据挖掘案例分析、经典案例、技术实现方案

1.数据挖掘案例分析 数据挖掘&#xff1a;是从大量数据中发现有用信息和模式的过程。 数据挖掘案例分析&#xff1a;是指通过对已有数据进行挖掘和分析&#xff0c;发现其中的模式和规律&#xff0c;并根据这些发现提出相应的解决方案和决策建议的过程。 以下是一些常见的数据…

03-快速上手RabbitMQ的5种消息模型

RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件,有几个常见概念 connections(连接): 将来publisher(消息的发送者)或者consumer(消息的接收者)都需要先与MQ建立连接 channel(通道): 建立连接后需要创建通道,生产者和消费者就是基于通道完成消息的发送和接收 ex…

_note_06

1.说一说函数的按地址传递和按值传递&#xff0c;他们的区别是什么&#xff1f; 函数的参数传递方式可以分为按地址传递&#xff08;也称为按引用传递&#xff09;和按值传递两种方式。按值传递是指将实际参数的值复制给形式参数&#xff0c;即在函数调用时&#xff0c;实际参数…

探索云原生数据库技术:构建高效可靠的云原生应用

数据库是应用开发中非常重要的组成部分&#xff0c;可以进行数据的存储和管理。随着企业业务向数字化、在线化和智能化的演进过程中&#xff0c;面对指数级递增的海量存储需求和挑战以及业务带来的更多的热点事件、突发流量的挑战&#xff0c;传统的数据库已经很难满足和响应快…

2023年终总结——跌跌撞撞不断修正

目录 一、回顾1.一月&#xff0c;鼓足信心的开始2.二月&#xff0c;焦躁不安3.三月&#xff0c;路还是要一步一步的走4.四月&#xff0c;平平淡淡的前行5.五月&#xff0c;轰轰烈烈的前行6.六月&#xff0c;看事情更底层透彻了7.七月&#xff0c;设计模式升华月8.八月&#xff…

04hive数仓内外部表复杂数据类型与分区分桶

hive内部表和外部表 默认为内部表&#xff0c;外部表的关键字 &#xff1a;external内部表&#xff1a;对应的文件夹就在默认路径下 /user/hive/warehouse/库名.db/外部表&#xff1a;数据文件在哪里都行&#xff0c;无须移动数据 # students.txt 1,Lucy,girl,23 2,Tom,boy,2…

Kafka的分区机制

Kafka的分区机制是其核心功能之一&#xff0c;旨在提高可扩展性和并行处理能力。下面概述了Kafka分区的基本概念和工作原理&#xff1a; Kafka分区基本概念 分区&#xff08;Partition&#xff09;&#xff1a;Kafka中的主题&#xff08;Topic&#xff09;可以细分为多个分区…

政安晨:【深度学习处理实践】(五)—— 初识RNN-循环神经网络

RNN&#xff08;循环神经网络&#xff09;是一种在深度学习中常用的神经网络结构&#xff0c;用于处理序列数据。与传统的前馈神经网络不同&#xff0c;RNN通过引入循环连接在网络中保留了历史信息。 RNN中的每个神经元都有一个隐藏状态&#xff0c;它会根据当前输入和前一个时…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…

计算机视觉——P2PNet基于点估计的人群计数原理与C++模型推理

简介 人群计数是计算机视觉领域的一个核心任务&#xff0c;旨在估算静止图像或视频帧中的行人数量。在过去几十年中&#xff0c;研究人员在这个领域投入了大量的精力&#xff0c;并在提高现有主流基准数据集性能方面取得了显著进展。然而&#xff0c;训练卷积神经网络需要大规…

matlab阶段学习笔记小节2

syms定义符号变量 求极限 第二题 第三题 limit(y,n,inf);求的的函数y关于自变量n在无穷处&#xff08;inf&#xff09;的极限 exp(2)即指数为2&#xff0c;底为e,也就是e^2 求导数 第一题 log(x)默认是以e为底的指数函数&#xff0c;也就是ln(x). 使用diff(f)对函数进行求…

算法-双指针、BFS与图论-1113. 红与黑

题目 思路 本题相当于问BFS中的当前点所在的区域连通块有多少个 Flood Fill算法 &#xff08;可参考以下链接&#xff1a;洪水覆盖算法(Flood Fill)&#xff1a;颜色填充-CSDN博客&#xff09;本题用DFS实现Flood Fill算法DFS是否需要恢复现场&#xff1a;&#xff08;重要&am…

新IDEA电脑环境设置

1.设置UTF-8 2.Maven 3.JRE选对

【漏洞复现】华三用户自助服务产品dynamiccontent.properties.xhtml接口处存在RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…