02. VBA从入门到精通——基础语法

数据类型

  • 常用数据类型

        Integer:整数,-32,768到32,767之间的整数

        Long:较长长整数,-2,147,483,648到2,147,483,647之间的整数

        Single:浮点数,它可以存储大约:6到7位小数的精度。

        Double:较长浮点数,大约15位小数的精度

        Boolean:布尔值,只有两个取值,True和False

        Date:日期

        Object:任何对象引用

        String:字符串

  • 自定义数据类型

        标准模块中需要使用Type语句,类模块中需要使用Private Type

        示例:

Type AA 

  ID As Integer

  Name As String

  Phone As Long
end Type

声明及使用常量

数值常量:如1、3.7

字符常量:用双引号表示,如"AA"

符号常量:声明符号常量时可以同时定义数据类型

        用法:

                Const 常量名 = 常量值

        示例:

                Const Name = "小明"

                Const Name As String = "小明"

逻辑常量:只有两个:True、False

日期常量:有两种表示方法

        示例:

                (1) a = #20/1/2024#

                (2) a = "2024-3-2"

内置常量:一般以vb或xl为前缀,有颜色、星期、按钮、符号(如换行符)等相关内置常量

MsgBox的Buttons参数

vbOKOnly:对应值为0,只显示“确定”按钮,即默认情况,而0也无需在参数中特意指明。

vbOKCancel:对应值为1,同时显示“确定”和“取消”按钮。

vbAbortRetryIgnore:对应值为2,同时显示“中止”、“重试”、“忽略”按钮。

vbYesNoCancel:对应值为3,显示“是”、“否”、“取消”按钮。

vbYesNo:对应值为4,显示“是”和“否”按钮。

vbRetryCancel:对应值为5,显示“重试”和“取消”按钮。

示例

Public Sub test()
    Dim res
    res = MsgBox("是否进行数据修改", 4)
    If res = vbYes Then
        '修改数据语句
    End If
    
End Sub

         

声明及使用变量      

  • VBA允许使用未定义变量,但容易发生错误,所以一般设置成强制声明变量。

        设置:工具→选项→编辑器→要求变量声明

        模块中Option Explicit 表示强制声明变量

        注意:

                变量要以字母或汉字开头,并只能由字母、汉字、字母、下划线组成

  • 定义变量

        一般使用Dim定义,也可以使用ReDim、Public、Private、Static

        示例:

                Dim XY As string #初始值为空字符串

  • 使用类型标识符定义变量

        (如果设置了强制声明变量,这种方法是不被允许的)

        常用标识符

                $:字符串

                %:整形

                &:长整型

                ! :浮点数

                @:货币型

        示例:

                a$ = "小明

                d! = 1300

  • 定义和使用对象变量

        (用Object作为对象变量通用关键词,为了使程序可读性更强、运行快,最好创建引用到具体对象类型的对象变量,如用Range或Worksheet作为关键词

        声明对象变量:

                Dim Rng As Object  ’声明变量Rng为对象变量

                 Dim Rng As Worksheet  ‘声明要引用一个工作表为对象Rng的值

        赋值对象变量:

                Set Rng = Worksheets("Sheet1").Range("A1:E10")  '赋值对象变量为工作表Sheet1中单元格

  • 定义模块级变量

        模块级变量:是指对模块中所有的子程序和函数都有效的变量

        用法:可在该模块的顶部使用Dim或Private进行声明

       例如:

                Dim x As String,y As String

  • 定义公共变量

        公共变量:对所有模块的子程序和函数都有效

        用法:应在某标准模块的顶部使用Public 进行声明,一般可以创建一个专门保存公共变量的标准模块,以便于查看变量的定义和使用

        例如:

                Public ws As Worksheet

定义数组

  • 定义静态数组

        静态数组:是指维度和大小固定不变的数字

        一维数组:

                Dim A(10) As Long 或 Dim A(0 To 10) As Long '表示从0到10是一个数

        二位数组

                 Dim A(2,10) As Long 或 Dim A(0 To 2,0 To 9) As Long '表示从0到2和从0到10,他们交叉相乘为30,所以数组大小为30

        示例

Sub test()
    Dim ws As Worksheet
    Dim i As Long
    Dim aa(1 To 9) As String
    Set ws = Worksheets("1")
    For i = 1 To 9
        aa(i) = ws.Range("A" & i + 1)
    Next i
    
            
End Sub
  • 定义动态数组

        动态数组:是指在程序运行时其大小可以变化,使用动态数组可以节省内存,加快运行速度

        用法:

                ReDim ABC(n) As String

        注意:动态属于组的声明语句必须放在数组元素变量赋值语句后面

        补充:Excel VBA中使用Range时,有一个End属性,以Range单元格为基准定位到其上、下、左、右最后一个有数据的单元格,也可以用数字表示。

                其中1代表:xlToLeft 
                其中2代表:xlToRight
                其中3代表:xlup
                其中4代表:xldown

        示例:          

Sub AA()
    Dim i As Integer
    Dim n As Integer
    n = Range("A10000").End(xlUp).Row - 1 '表示表中A10000区域内最后一行的行号
    ReDim AA(1 To n) As String
    For i = 1 To n
        AA(i) = Range("A" & i)
    Next i

End Sub
  • 将数组的缺省下界设置为1

        缺省时默认为0

        方法一:

                dim A(1 to 3) as string

                redim A(1 to n) as string

        方法二:在模块顶部写入如下语句

                Option Base 1

  • 获取数组的最小下标和最大下标

        LBound() 获取最小下标

        UBount() 获取最大下表

        补充:MsgBox ‘输出标题

        示例:

                Dim a(10,2,4) As String

                MsgBox LBound(a,3) ’表示第三维度的最小下标

数据运算规则及运算符

  • 赋值运算符

        = 

  • 数学运算符:

        +、-、*、/、\、-、^   '加、减、乘、除、整除、符号、乘幂

  • 比较运算符:

        =、<>(不等于)、>、<、>=、<=、Like(字符串模糊匹配)、Is(逻辑)

        示例:表示判断A列表里有媒体字样和B列表匹配北京就输出

                If Range("A" & i) Like "*媒体*" And Range("B" & i) = "背景" Then

                        MsgBox "客户:" & Range("A" & i)

  • 逻辑运算符:

        Not '非

        And '与

        Or '或

        Xor '异或

        Eqv '相等

        Imp '逻辑蕴含

  • 字符连接运算:

        & '可连接任意数据

        + '只能连接文本字符

语句基础知识              

循环语句

For ... Next循环语句

提示:

        循环数组中的所有元素,可以利用UBound和LBound然后通过For...Next进行循环

        循环集合中所有对象:也可以利用集合中Count属性获取集合对象个数通过For..Next进行循环

语法:

        For 计数器 = 初始值 To 终值 [步长]         '步长可以为负数,默认为1

                [循环体]

                [Exit For]         '退出循环,一般设置一个条件判断语句

                [循环体]

        Next 计数器        '计数器 = 计数器 + 步长

示例:九九乘法表              

Public Sub test()
    Dim i As Integer, j As Integer
    Range("A1") = "九九乘法表"
    For i = 1 To 9
        For j = 1 To i
            Cells(i + 1, j) = i & "*" & j & "=" & i * j
        Next j
    Next i
    
End Sub

结果显示:            

For Each...Next 循环语句 

        For Each...Next 是对集合中所有元素进行循环

        语法:

                For Each 集合中元素 In 集合

        示例:循环当前工作博中所有工作表,并把表名输出到当前工作表A列

                

Public Sub test()
    Dim ws As Worksheet
    Dim i As Integer
    i = 1
    For Each ws In ThisWorkbook.Worksheets '把表对象赋值给ws
        Range("A" & i) = ws.Name
        i = i + 1
    Next
    Set ws = Nothing
    
End Sub

Do ... Loop 循环

for 循环一般用在已经循环多少次的情况,当未知时一般使用Do...Loop循环

  • 第一中结构:先判定在循环

        Do While 判定条件

                循环体

        Loop

  • 第二种结构:先循环在判定

        Do

                循环体

        Loop While 判定条件

  • 第三种结构:判定条件为False时执行循环

        Do Until 判定条件

                循环体

        Loop

  • 第四种结构:

        Do

                循环体

        Loop Until 判定条件

  • 推出Do循环:Exit Do,一般设置判断语句

使用While ... Wend 循环

条件成立就执行类似Do While .. Loop

语法结构:

        While 条件判断

                循环体

        Wend

条件控制语句

单行语法:如果符合就语句1否则就语句2

        If 条件 Then 语句 1 [Else 语句2]

多行语法一:如果符合就语句

        If 条件 Then

                语句块

        End If

多行语法二:如果符合就语句1否则就语句2

        If 条件 Then

                语句1

        Else

                语句2

        End If

多行语法三:

        If 条件1 Then

                语句1

        ElseIf 条件2

                语句2

        ElseIf 条件3

                语句3

        ...

        [ Else

                语句n ]

        End If        

补充:Exit Sub '表示退出程序,可以跟条件语句结合使用

示例:

Public Sub test()
    Dim res
    res = MsgBox("是否进行数据修改", vbYesNo + vbQuestion)
    If res = vbYes Then
        '修改数据语句
    End If
    
End Sub

Select Case语句        

在使用多分支语句比较麻烦时可以使用Select Case语句   

语法:

        Select Case 变量或表达式

                Case 值1        ‘如果符合值1就执行语句1

                        语句1

                [Case 值2        '如果符合值2就执行语句2....

                        语句2]

                ....

        End Select

        提示:其中,值1、值2...可以取以下几种形式

                (1)具体常数:如1、2、A、"汉语"..

                (2)连续的数据范围,如1 To 100 ,A To C 等

                (3)满足某哥条件的表达式。如Is关系表达式

                        例: Case Is <5,10,30,40,Is > 100

语句书写技巧

  • 为了简洁明了,可以将多行类似语句写在同一行

        对于赋值语句,需要用冒号隔开

        对于声明语句,需要用逗号隔开

  • 断行:

        在VBA中一行最多255字符,可以在行尾追加一个空格和一个下划线进行换行

  • 两种注释方法:

        (1)'

        (2)Rem ,此时注释语句只能单独一行

使用With语句提高程序运行效率

        当使用对象的诸多属性和方法时,最好使用With语句

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费的WordPress插件大全

在当今数字化的时代&#xff0c;拥有一个强大的在线存在变得至关重要。而对于使用WordPress建站的用户来说&#xff0c;插件是提高网站功能的关键。在这篇文章中&#xff0c;我们将为您推荐三款免费的WordPress插件&#xff0c;它们不仅是147SEO软件中的佼佼者&#xff0c;而且…

【Leetcode】接雨水(双指针、单调栈)

目录 &#x1f4a1;题目描述 &#x1f4a1;双指针解法 &#x1f4a1;单调栈解法 &#x1f4a1;题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 提示&#xff1a; n height.length1 < n…

this.$set的用法

作用&#xff1a; 在data里面绑定的数据具有响应式的效果,也就是我们说的V-Model 数据更新视图,视图也能更新数据&#xff0c;如果不是data里面的数据如何添加响应式呢&#xff1f; this.$Set这个方法能够实现 用法&#xff1a; this.$Set(要添加的对象,要添加的属性’,要添…

为什么C++17要引入std::string_view?

目录 1.引言 2.原理分析 2.1.结构 2.2.构造函数 2.3.成员函数 2.4.std::string_view字面量 3.实例 3.1.std::string_view和std::string的运算符操作 3.2.查找函数使用 3.3.std::string_view和临时字符串 4.总结 1.引言 在C/C日常编程中&#xff0c;我们常进行数据的…

Offer必备算法_双指针_八道力扣OJ题详解(由浅到深)

目录 双指针算法原理 ①力扣283. 移动零 解析代码 ②力扣1089. 复写零 解析代码 ③力扣202. 快乐数 解析代码 ④力扣11. 盛最多水的容器 解析代码 ⑤力扣611. 有效三角形的个数 解析代码 ⑥剑指 Offer 57. 和为s的两个数字 解析代码&#xff1a; ⑦力扣15. 三数之…

最通俗易懂的JVM内存管理与对象创建原理

前言 对于Java程序员来说&#xff0c;在虚拟机自动内存管理机制的帮助下&#xff0c;不再需要像 C/C程序为每一个new操作去写配对 的delete/free代码&#xff0c;不容易出现内存泄漏和内存溢出问题。也正是因为Java程序员把控制内存的权力交给了Java虚拟机&#xff0c;一旦出现…

SpringMVC基础知识学习笔记

Universe Infinity Inc. 目录 一、学习SpringMVC主要是学什么1、SpringMVC的基本原理2、SpringMVC学习串联 二、快速体验SpringMVC的开发1、新建项目&#xff0c;转成web项目2、引入依赖3、编写Spring的配置类4、配置web启动类&#xff0c;替代web.xml5、编写Handler&#xff…

都在卷鸿蒙开发,那就推荐 几个鸿蒙开源项目

如果要问2024年最火的技术是什么,那鸿蒙开发必须占据一些位置,HarmonyOS是华为自主研发的物联网操作系统,自2019年8月正式发布以来便受到了广大开发者的追崇。为了方便大家学习鸿蒙开发,本文分享 12 个开源的鸿蒙实战项目,希望能从这些项目中获得启发和实用经验。 小狐浏…

IDEA的database使用

一、数据据库 在使用database之前&#xff0c;首先你的电脑要安装好了数据库并且启动。 MySQL卸载手册 链接&#xff1a;https://pan.baidu.com/doc/share/AVXW5SG6T76puBOWnPegmw-602323264797863 提取码&#xff1a;hlgf MySQL安装图解 链接&#xff1a;https://pan.baidu.…

Win10/11中VMware Workstation设置网络桥接模式

文章目录 一、添加VMware Bridge Protocol服务二、配置桥接参数1.启用系统Device Install Service服务2.配置VMware 需要确认物理网卡是否有添加VMware Bridge Protocol服务 添加VMware Bridge Protocol服务 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

艾比森的“增长炼金术”:从四力驱动到三层面增长

在技术驱动的LED显示行业&#xff0c;产品迭代快、周期波动大&#xff0c;企业经营时时承压。 但是&#xff0c;市场上总不乏打破“传统”的个例。根据2023年业绩预告&#xff0c;艾比森预计2023年实现归母净利润3.10亿-3.50亿元&#xff0c;同比增长52.70%-72.40%&#xff1b…

HttpServletRequest getServerPort()、getLocalPort() 、getRemotePort() 区别

getRemotePort() 、getServerPort()、getLocalPort() request.getServerPort()、request.getLocalPort() 和 request.getRemotePort() 这三个方法都是获取与HTTP请求相关的端口信息的 客户端(如浏览器)通过某个随机分配的网络连接端口(7070) 向服务器发送HTTP请求( http://exam…

【Docker】未来已来 | Docker技术在云计算、边缘计算领域的应用前景

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…

[小程序]向服务器上传图片和从服务器下载图片

本例的服务器基于flask&#xff0c;配置flask可以参见[Flask]上传多个文件到服务器https://blog.csdn.net/weixin_37878740/article/details/128435136?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170581653516800185854860%2522%252C%2522scm%2522%253A%252220…

【iOS】UICollectionView的基本使用

使用UITableView作为表格来展示数据完全没有问题&#xff0c;但仍有许多局限性&#xff0c;对于一些更加复杂的布局样式&#xff0c;就有些力不从心了 比如&#xff0c;UITableView只允许表格每一行只能显示一个cell&#xff0c;而不能在一行中显示多个cell&#xff0c;对于这…

项目管理该考哪个证书❓NPDP还是软考❓

有小伙伴在纠结是要考NPDP认证呢还是考软考呢❓ 今天小编要给大家好好说说NPDP认证❗️ &#x1f4a1;NPDP全称New Product Development Professional&#xff0c;也就是产品经理国际资格认证。 &#x1f525;NPDP是国际公认的为一的新产品开发专业认证&#xff0c;是集理论、方…

【神经网络】火箭点火发射-诠释一场数据与学习的奇妙之旅

火箭点火发射来理解神经网络的故事细节 在一个充满科技气息的研究室里&#xff0c;一群科学家们正在忙碌地准备着一次重要的火箭点火发射。这次发射不仅是一次航天探索的壮丽征程&#xff0c;更是一场利用神经网络处理数据的智慧之旅。 在火箭发射的背后&#xff0c;神经网络…

使用freessl为网站获取https证书及配置详细步骤

文章目录 一、进入freessl网站二、修改域名解析记录三、创建证书四、配置证书五、服务启动 一、进入freessl网站 首先进入freessl网站&#xff0c;需要注册一个账号 freessl网站 进入网站后填写自己的域名 接下来要求进行DCV配置 二、修改域名解析记录 到域名管理处编辑域名…

MySQL基础笔记(8)多表查询

一.多表关系介绍 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也会存在着各种联系&#xff0c;分为如下3类&#xff1a; 一对…

【算法详解】力扣162.寻找峰值

​ 目录 一、题目描述二、思路分析 一、题目描述 力扣链接&#xff1a;力扣162.寻找峰值 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个…