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;并根据这些发现提出相应的解决方案和决策建议的过程。 以下是一些常见的数据…

Java中交集、并集、差集、补集

一、交集 //交集Testpublic void intersection(){//向集合中添加元素ArrayList<String> datas new ArrayList<>();Collections.addAll(datas, "张三", "李四", "王五", "赵六");//向集合中添加元素ArrayList<String&…

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

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

django自定义表单

文章目录 django自定义表单两种方式自定义错误信息widgets实例化和初始化处理用户提交的数据验证表单通用类试图使用表单Formset django自定义表单 两种方式 继承Form类继承ModelForm类 from django import forms from .models import Contact# 自定义表单字段 class Contac…

_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…

Python实战:Python常用IDE选择

在Python编程的旅程中&#xff0c;选择一个合适的开发环境至关重要。本文将详细介绍三种流行的Python开发环境&#xff1a;PyCharm、VS Code和Jupyter Notebook。我们将探讨它们的特点、安装步骤、基本使用方法&#xff0c;并通过具体的代码示例来展示如何在这些环境中编写和运…

Python中,括号内部的for循环(列表推导式)

在Python中&#xff0c;括号内部的for循环通常用于列表推导式&#xff08;list comprehension&#xff09;&#xff0c;这是一种简洁创建列表的方式。列表推导式可以使用任何可迭代对象内的元素来创建新的列表元素。 列表推导式的基本语法结构如下&#xff1a; [expression f…

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…

AI辅助研发:引领科技创新的未来之路

随着人工智能技术的快速发展和广泛应用&#xff0c;AI辅助研发正逐渐成为科技界和工业界的焦点。2024年&#xff0c;作为AI技术进一步成熟的见证者&#xff0c;我们正处于AI辅助研发的黄金时代。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI的影响力已…