【excel】VBA简介(Visual Basic for Applications)

文章目录

  • 一、基本概念
  • 二、语法
    • 2.1 数据类型
      • 2.11 基本数据类型
      • 2.12 常量
      • 2.13 数组
    • 2.2 控制语句
      • 2.21 条件语句
      • 2.22 循环语句
      • 2.23 错误处理:On Error
      • 2.24 逻辑运算
    • 2.3 其它语句
      • 2.31 注释
      • 2.32 with语句
    • 2.4 表达式
      • 2.41 常见表达式类型
      • 2.42 表达式的优先级
    • 2.5 VBA 的代码结构
  • 三、VBA开发环境
  • 四、VBA的内存管理
  • 五、常用内置函数
  • 六、VBA和宏
  • =====================

跟很多面向过程的编程语言类似的。本文写的很简单,我基本不用VBA的。自己可以去微软看文档。

一、基本概念

VBA(Visual Basic for Applications)是一种由微软开发的编程语言,主要用于自动化操作和扩展Microsoft Office应用程序的功能。

它是Visual Basic编程语言的一个子集,能够让用户创建自定义的脚本、自动化任务、构建应用程序界面以及进行复杂的数据处理。VBA不仅局限于Excel,还可以用于Word、PowerPoint、Outlook等多种Microsoft Office应用程序。

还有一个东西叫COM,比如用C语言读写excel等。

VBA的基本特点:

  1. 集成性:VBA与Microsoft Office应用程序紧密集成,允许用户通过编程接口访问Office应用的对象模型,从而控制应用程序的各项功能。

  2. 易学易用: 相对于其他编程语言,VBA的语法相对简单,且与Visual Basic相似,对于初学者来说较为友好。

  3. 宏功能:VBA被广泛应用于Excel的宏录制中,用户可以通过录制操作生成VBA代码,并对其进行编辑和扩展。

  4. 跨平台支持 :VBA代码在Windows和Mac版的Office中都有支持,但在Mac版Office中的一些功能有所限制。

VBA的应用领域:

  1. 自动化重复性任务
    利用VBA可以实现一些重复性任务的自动化,如在Excel中处理大量数据、生成报表、自动填充表单等。

  2. 自定义Excel函数
    用户可以通过VBA编写自定义函数,在Excel中实现一些标准公式无法完成的任务。

  3. 创建用户界面
    使用VBA可以创建表单和控件,如文本框、按钮、下拉菜单等,增强用户与Excel交互的体验。

  4. 数据处理和分析
    通过VBA可以实现复杂的数据操作,如筛选、排序、数据转换、生成图表等。

  5. Office应用集成
    VBA不仅可以用于Excel,也可以与Word、Outlook、PowerPoint等其他Office应用程序集成,实现跨应用的数据操作和功能扩展。

二、语法

2.1 数据类型

2.11 基本数据类型

数据类型描述存储大小取值范围/精度
Byte存储0到255之间的整数1 字节0 到 255
Integer存储-32,768到32,767之间的整数2 字节-32,768 到 32,767
Long存储-2,147,483,648到2,147,483,647之间的整数4 字节-2,147,483,648 到 2,147,483,647
Single存储单精度浮点数,精度为7位有效数字4 字节-3.402823E38 到 3.402823E38
Double存储双精度浮点数,精度为15位有效数字8 字节-1.7976931348623157E308 到 1.7976931348623157E308
Currency存储货币类型数据,精度为4位小数8 字节-922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal存储高精度的十进制数16 字节范围较大,精度更高,用于需要高精度的小数计算
String存储文本数据,动态长度动态0 到 2GB(取决于内存和平台)
Date存储日期和时间8 字节从公元100年1月1日到9999年12月31日,时间精度到秒
Boolean存储布尔值2 字节True(1)或 False(0)
Object存储对象的引用4 字节(通常)适用于任何COM对象,如Excel、Word应用对象等
Variant存储任何类型的数据,类型动态分配16 字节(通常)可以存储任意类型的数据,如Integer, String, Date
Any用于函数参数,允许传入任何类型的数据根据类型任何数据类型
User-defined Types (UDT)自定义数据类型,用于组合多个不同的数据类型依据结构体大小组合多个数据类型
数组存储多个同类型的元素动态/定长数量及大小根据定义,数组元素类型相同
Enum定义一组命名常量值4 字节(通常)可指定每个常量值,默认从1开始递增

补充说明:

  • 定长字符串String * n(例如:String * 10)表示一个长度为 n 的固定长度字符串。
  • 动态数组:数组大小可以通过 ReDim 动态调整。
  • Variant 类型:可以存储任何类型的数据,并根据存储的内容动态转换,通常用于存储不确定类型的数据。

自定义类型相当于C语言的struct,例如:

Type 自定义类型名元素名  As 类型…[元素名 As 类型]
End Type 

2.12 常量

常量是用于定义固定值的标识符,这些值在程序运行期间不能改变。

VBA支持不同类型的常量,常用的包括数字常量、字符串常量、布尔常量、以及用户定义常量。

在VBA中,常量通过Const语句来声明,常量的值一旦设置就无法改变。

Const 常量名 As 数据类型 = 常量值

例如:

Const pi As Double = 3.14159

常量的类型与变量类似,可以是数值型、字符串型、布尔型等。

常量类型示例定义说明
数值常量Const pi As Double = 3.14159用于定义固定的数字值。
布尔常量Const isEnabled As Boolean = True用于定义固定的布尔值,通常是 TrueFalse
字符串常量Const greeting As String = "Hello, World!"用于定义固定的字符串值。
日期常量Const startDate As Date = #1/1/2025#用于定义固定的日期值。

VBA还提供了许多预定义的内置常量,常用于特定的编程任务,例如与文件操作、错误处理、对象模型等相关的常量。以下是一些常见的内置常量:

常量名称说明
vbYes在消息框中表示“是”按钮的常量
vbNo在消息框中表示“否”按钮的常量
vbCancel在消息框中表示“取消”按钮的常量
vbOK在消息框中表示“确定”按钮的常量
vbCritical在消息框中显示“错误”图标
vbInformation在消息框中显示“信息”图标
vbExclamation在消息框中显示“警告”图标
vbDefaultButton1表示消息框中第一个按钮是默认按钮
vbTab表示制表符,通常用于文本格式化
vbCrLf表示回车换行符(用于文本换行)
vbObjectError用于自定义错误代码的常量
vbTrue布尔值常量,表示 True(逻辑真)
vbFalse布尔值常量,表示 False(逻辑假)
vbNull为空值,通常用于数据库操作,表示未设置或空值

VBA允许用户自定义常量,可以通过Const语句为特定的应用场景定义常量。例如,定义一个表示每年365天的常量:

Const DaysInYear As Integer = 365

常量作用范围

  • 常量的作用范围通常是其所在的模块。如果常量在一个子程序或函数内部声明,则其作用范围仅限于该子程序或函数。
  • 如果常量在模块级别(模块的最顶端)声明,则它的作用范围是整个模块。若使用Public关键字,则常量在整个项目中可用。

例如:

' 在模块级别声明常量
Public Const MaxAttempts As Integer = 3

常量与变量的区别

特性常量变量
值是否可变不可变,一旦赋值后不能修改可修改,程序运行时值可以改变
声明方式使用 Const 关键字声明使用 DimPrivate 等声明
存储位置存储在内存中,且值是固定的存储在内存中,值是动态的

常量的示例:

Sub TestConstants()' 数值常量Const Pi As Double = 3.14159Debug.Print Pi  ' 输出:3.14159' 布尔常量Const IsActive As Boolean = TrueDebug.Print IsActive  ' 输出:True' 字符串常量Const WelcomeMessage As String = "Welcome to VBA!"Debug.Print WelcomeMessage  ' 输出:Welcome to VBA!' 日期常量Const StartDate As Date = #1/1/2025#Debug.Print StartDate  ' 输出:1/1/2025' 使用内置常量If MsgBox("Do you want to continue?", vbYesNo + vbQuestion, "Confirm") = vbYes ThenDebug.Print "User clicked Yes"ElseDebug.Print "User clicked No"End If
End Sub

2.13 数组

数组是用来存储多个相同类型数据的一种数据结构。数组可以包含多个元素,每个元素通过索引访问。VBA支持定长数组(固定大小)和动态数组(大小可变)。

❄️数组可以使用Dim语句声明,并且可以是定长数组或动态数组。

  • 定长数组:定长数组的大小在声明时就被固定下来,不能改变。
Dim arr(5) As Integer  ' 声明一个包含6个元素的整型数组,索引从0到5
  • 动态数组:动态数组的大小可以在运行时通过ReDim语句动态调整。
Dim arr() As Integer  ' 声明一个未指定大小的整型数组
ReDim arr(5)          ' 运行时指定数组大小为6,索引从0到5

默认情况是下标从0开始,所以数组长度是最大索引+1,但是也可以设置下标从1开始,最大长度则和最大索引相同:
使用语句:Option Base 1即可设置(默认是0)。
这会影响到你在整个模块中声明的数组

❄️数组的元素通过索引来访问,索引通常从0开始,也可以自定义起始索引。

Dim arr(5) As Integer
arr(0) = 10  ' 给第一个元素赋值
arr(1) = 20  ' 给第二个元素赋值
Debug.Print arr(0)  ' 输出:10
Debug.Print arr(1)  ' 输出:20

🧪 二维数组:

Dim arr(2, 3) As Integer  ' 创建一个二维数组,3行4列
arr(0, 0) = 1
arr(1, 2) = 5
Debug.Print arr(1, 2)  ' 输出:5

🧪三维数组:

Dim arr(2, 2, 2) As Integer  ' 创建一个三维数组
arr(0, 0, 0) = 10
arr(1, 2, 2) = 20
Debug.Print arr(1, 2, 2)  ' 输出:20

动态数组在声明时没有指定大小,可以通过ReDim来调整数组的大小。ReDim只能用于动态数组。

Dim arr() As Integer
ReDim arr(5)  ' 数组大小为6,索引从0到5
arr(0) = 10
arr(5) = 50ReDim Preserve arr(10)  ' 扩展数组的大小为11,且保留已有的数据
arr(10) = 100
  • ReDim Preserve:使用Preserve关键字可以在调整数组大小时保留现有的元素数据,但只限于调整最后一个维度的大小。
ReDim Preserve arr(10)  ' 调整数组大小并保留数据

删除动态数组:

Erase arr  ' 释放动态数组的内存

🟢VBA数组的下标范围可以通过LBound(获取数组的最小索引)和UBound(获取数组的最大索引)来获取。对于多维数组,可以指定维度。

Dim arr(1 To 5) As Integer
Debug.Print LBound(arr)  ' 输出:1
Debug.Print UBound(arr)  ' 输出:5

对于多维数组:

Dim arr(1 To 3, 1 To 4) As Integer
Debug.Print LBound(arr, 1)  ' 输出:1
Debug.Print UBound(arr, 1)  ' 输出:3
Debug.Print LBound(arr, 2)  ' 输出:1
Debug.Print UBound(arr, 2)  ' 输出:4

VBA数组可以在声明时进行初始化,尤其是对于固定大小的数组。

Dim arr(3) As Integer
arr = Array(1, 2, 3, 4)  ' 初始化数组元素

Array函数可用于快速初始化数组,但它不适用于动态数组。

🟣 数组常见操作

  • 复制数组
    通过Copy方法可以复制数组,但需注意数组大小一致,或者使用ReDim Preserve方法来扩展数组。

    Dim arr1(5) As Integer
    Dim arr2() As Integer
    arr1(0) = 10
    arr1(1) = 20
    arr2 = arr1  ' 将arr1的内容复制到arr2
    
  • 数组排序
    如果需要对数组排序,可以使用VBA中的Sort方法(如在Excel中对数据排序)或手动编写排序算法(如冒泡排序)。


2.2 控制语句

控制语句,用于根据不同的条件或循环执行不同的代码块。常见的控制语句包括 条件语句(如 If...Then...Else)、选择语句(如 Select Case)和 循环语句(如 For, Do...Loop)。以下是这些控制语句的详细介绍。

2.21 条件语句

❄️(1) If…Then…Else:用于根据条件的真假来执行不同的代码块。

If 条件 Then' 条件为True时执行的代码
Else' 条件为False时执行的代码
End If

示例:

Dim x As Integer
x = 10If x > 5 ThenDebug.Print "x大于5"
ElseDebug.Print "x小于或等于5"
End If

❄️(2) If…Then…ElseIf…Else:如果有多个条件需要判断,可以使用 ElseIf

If 条件1 Then' 条件1为True时执行的代码
ElseIf 条件2 Then' 条件2为True时执行的代码
Else' 如果条件1和条件2都不为True时执行的代码
End If

示例:

Dim x As Integer
x = 10If x > 15 ThenDebug.Print "x大于15"
ElseIf x > 5 ThenDebug.Print "x大于5但小于或等于15"
ElseDebug.Print "x小于或等于5"
End If

❄️(3) Select Case: 用于根据一个表达式的值选择多个可能的分支,比多个 If...ElseIf 更简洁。

Select Case 表达式Case 值1' 执行的代码块Case 值2' 执行的代码块Case Else' 所有值不匹配时执行的代码
End Select

示例:

Dim x As Integer
x = 3Select Case xCase 1Debug.Print "x等于1"Case 2Debug.Print "x等于2"Case 3Debug.Print "x等于3"Case ElseDebug.Print "x不是1、2或3"
End Select

2.22 循环语句

❄️(1)For…Next:用于重复执行某段代码,直到满足指定的条件。

For i = 初始值 To 终止值 [Step 步长]' 每次循环执行的代码
Next i

示例:

For i = 1 To 5Debug.Print "当前值是:" & i
Next i

❄️(2) For Each…Next:用于遍历集合或数组中的每个元素。

For Each 元素 In 集合或数组' 每次循环执行的代码
Next 元素

示例:

Dim arr(3) As Integer
arr(0) = 10
arr(1) = 20
arr(2) = 30For Each value In arrDebug.Print value
Next value

❄️(3)Do…Loop:用于在满足条件时重复执行某段代码。可以根据不同条件控制循环的开始、结束或退出方式。

Do While 条件' 条件为True时执行的代码
Loop

或者:

Do Until 条件' 条件为False时执行的代码
Loop

示例:

Dim i As Integer
i = 1Do While i <= 5Debug.Print "当前值是:" & ii = i + 1
Loop

❄️(4) Do…Loop While/Until

Do...Loop WhileDo...Loop Until 循环在循环体内先执行代码,再检查循环条件。

Do' 执行的代码
Loop While 条件  ' 条件为True时继续循环

或者:

Do' 执行的代码
Loop Until 条件  ' 条件为True时退出循环

示例:

Dim i As Integer
i = 1DoDebug.Print "当前值是:" & ii = i + 1
Loop Until i > 5

❄️🗺️(5) Exit For/Exit Do

Exit ForExit Do 用于提前退出循环,不再继续执行。

示例:

For i = 1 To 10If i = 5 ThenExit For  ' 当i等于5时退出循环End IfDebug.Print i
Next i

🧪跳出本次循环:

  • Exit For 用于跳出 For 或 For Each 循环。
  • Exit Do 用于跳出 Do…Loop 循环。

举例:

For i = 1 To 10If i = 5 ThenExit For  ' 当 i 等于 5 时,跳出整个 For 循环End IfDebug.Print "当前值是:" & i
Next i

2.23 错误处理:On Error

On Error 用于指定错误处理的方式。当运行时错误发生时,VBA 会根据 On Error 语句的指示进行相应的处理。

  • On Error GoTo 错误标签:当发生错误时跳转到指定的标签。
  • On Error Resume Next:发生错误时跳过错误的代码行,继续执行下一行代码。
  • On Error GoTo 0:禁用错误处理,恢复默认行为(显示错误消息)。

示例:

Sub ErrorHandlingExample()On Error GoTo ErrorHandlerDim x As Integerx = 1 / 0  ' 除以零,会导致错误Exit SubErrorHandler:Debug.Print "发生错误:除以零"Resume Next  ' 错误处理后继续执行下一行代码
End Sub

2.24 逻辑运算

在控制语句中,可以使用逻辑运算符来组合多个条件。

运算符说明
And如果两个条件都为True,则为True
Or如果两个条件中至少有一个为True,则为True
Not对条件取反
Like用于模式匹配
Is比较对象或数据类型

示例:

Dim x As Integer
Dim y As Integerx = 10
y = 20If x > 5 And y < 25 ThenDebug.Print "x大于5,且y小于25"
End If

2.3 其它语句

2.31 注释

(英文)单引号:

' 这是一个单行注释
Dim x As Integer  ' 这是对代码行的注释
x = 10  ' 给变量x赋值为10

REM:

REM 这是一个单行注释
Dim x As Integer  REM 这是对代码行的注释
x = 10  REM 给变量 x 赋值为 10

2.32 with语句

With...End With 语句用于简化对对象的多次引用,避免每次都写出对象名。可以在 With 块内直接引用对象的属性和方法。

Sub TestWith()Dim obj As ObjectSet obj = CreateObject("Scripting.FileSystemObject")With objDebug.Print .GetFile("C:\test.txt").NameDebug.Print .GetFile("C:\test.txt").SizeEnd With
End Sub

2.4 表达式

表达式 是由运算符、常量、变量、函数调用等组成的,表示一个值的计算过程。表达式的结果可以是一个数值、字符串、布尔值或对象等。

2.41 常见表达式类型

VBA 中的表达式可以分为以下几种常见类型:

❄️(1)算术表达式:算术表达式用于执行数学运算,例如加法、减法、乘法、除法等。

运算符:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • ^ 幂运算
Dim x As Integer
x = 5 + 3 * 2  ' 结果是11

❄️(2)字符串表达式:字符串表达式用于连接字符串或操作字符串。

运算符:

  • & 字符串连接
Dim str As String
str = "Hello, " & "World!"  ' 结果是 "Hello, World!"

❄️(3)关系表达式:关系表达式用于比较两个值,并返回布尔值 (TrueFalse)。

运算符:

  • = 等于
  • <> 不等于
  • < 小于
  • > 大于
  • <= 小于等于
  • >= 大于等于
Dim x As Integer
x = 5
If x > 3 ThenMsgBox "x 大于 3"  ' 会弹出消息框
End If

❄️(4)逻辑表达式:逻辑表达式用于进行布尔值运算,通常用于控制结构中的条件判断。

运算符:

  • And 逻辑与
  • Or 逻辑或
  • Not 逻辑非
Dim x As Boolean
Dim y As Boolean
x = True
y = FalseIf x And Not y Then  ' 结果是 TrueMsgBox "x 为真且 y 为假"
End If

❄️(5)位运算表达式:位运算用于对整数的二进制位进行操作。

运算符:

  • And 位与
  • Or 位或
  • Xor 位异或
  • Not 位非
  • << 左移
  • >> 右移
Dim x As Integer
Dim y As Integer
x = 5  ' 二进制:0101
y = 3  ' 二进制:0011
Debug.Print x And y  ' 结果是1,二进制:0001

2.42 表达式的优先级

VBA 中的运算符优先级与其他大多数编程语言类似,常见的优先级如下(从高到低):

  1. 括号 ()
  2. ^ 幂运算
  3. */\(除法)、Mod(取模)等算术运算符
  4. +-(加法和减法)
  5. =、<>、<、>、<=、>=(关系运算符)
  6. Not(逻辑非)
  7. AndOr(逻辑运算符)

例如:

Dim result As Integer
result = 5 + 3 * 2  ' 结果是11,因为乘法的优先级高于加法

2.5 VBA 的代码结构

VBA的代码一般由以下几个部分组成:

  1. 模块
    VBA代码通常在模块中书写,可以是标准模块、类模块或工作表模块。模块是VBA代码的基本单元。

  2. 子过程(Sub)
    子过程是VBA中最常见的代码块,负责执行一系列操作。子过程没有返回值,通常通过 Sub 关键字定义。例如:

    Sub GreetUser()MsgBox "Hello, world!"
    End Sub
    
  3. 函数(Function)
    函数是用于计算并返回值的代码块。与子过程不同,函数会返回一个值,通常通过 Function 关键字定义。例如:

    Function AddNumbers(x As Integer, y As Integer) As IntegerAddNumbers = x + y
    End Function
    
  4. 变量和数据类型
    VBA支持多种数据类型,包括整数(Integer)、长整型(Long)、浮动数(Double)、字符串(String)、布尔型(Boolean)等。在VBA中声明变量时,可以使用 Dim 关键字。例如:

    Dim num As Integer
    num = 10
    
  5. 控制结构
    与其他编程语言一样,VBA也支持条件判断和循环等控制结构,如 If...Then...ElseFor...NextDo...Loop 等。例如:

    If num > 5 ThenMsgBox "Greater than 5"
    ElseMsgBox "Less than or equal to 5"
    End If
    

三、VBA开发环境

VBA的开发环境是Microsoft Office应用程序内的VBA编辑器(VBE,Visual Basic Editor)。VBE可以通过按下 Alt + F11 打开,它提供了编写和调试VBA代码所需的所有功能。开发者可以在VBE中进行以下操作:

  • 编写、调试和运行VBA代码。
  • 通过对象浏览器(F2)查看Office应用程序的对象模型。
  • 使用即时窗口(Ctrl + G)测试表达式和变量。

在这里插入图片描述

四、VBA的内存管理

VBA的内存管理相对简化,主要依赖于 VBA 运行时(VBE)和 Windows 操作系统的自动管理机制。

尽管 VBA 不提供像一些低级语言(如 C 或 C++)那样的显式内存管理工具(例如 mallocfree),但它还是通过一系列内建的机制来管理内存使用。

🧪(1) 内存自动管理

VBA 的内存管理由 垃圾回收(Garbage Collection)机制和 自动内存分配与释放 控制。这意味着,开发者不需要显式地为变量分配和释放内存。内存的管理是自动进行的,运行时会处理变量的生命周期。

  • 局部变量: 当局部变量的作用域结束时,它们所占用的内存会自动释放。这些局部变量通常是存储在栈内存中(stack memory)。
  • 全局变量: 全局变量(模块级变量、静态变量)会在程序运行期间保持有效,直到程序结束时才会被释放。它们一般是存储在堆内存中(heap memory)。

🧪(2)对象的内存管理

VBA 使用 引用计数 来管理对象的内存(如 Excel 的 Range 对象、Workbook 对象等)。对象的内存分配和释放通常是由 VBA 的垃圾回收机制自动管理的。

  • 引用计数: 当一个对象被创建时,VBA 会为它分配内存,并增加该对象的引用计数。每当一个变量或对象引用该对象时,引用计数就增加;当引用计数降为零时,该对象的内存会被自动释放。

    例如:

    Dim obj As Object
    Set obj = CreateObject("Excel.Application") ' 创建对象
    Set obj = Nothing  ' 解除引用,引用计数变为零,自动释放内存
    

尽管 VBA 自动管理内存,但在某些情况下,开发者需要明确地释放对象的引用,以确保内存尽早释放,尤其是当应用程序中有大量对象时。如果不手动设置对象为 Nothing,对象可能会在程序运行期间占用不必要的内存。

例如,当你不再需要某个对象时,应该显式地将其设置为 Nothing,这样可以清理内存:

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
' 做一些操作
Set ws = Nothing  ' 释放内存

🟠在 VBA 中,内存泄漏通常发生在以下几种情况:

  • 对象引用未被正确释放(即没有将对象设置为 Nothing)。
  • 长时间运行的宏中创建了大量的对象,但未及时释放。
  • 通过动态数组或 CreateObject 等方式创建的对象未释放。

为了避免内存泄漏,应当确保在不再使用对象时及时释放它们。

为了优化 VBA 程序的内存使用,可以采取以下措施:

  • 尽量减少全局变量的使用,尤其是大型对象,这些变量会在整个程序的生命周期内保持有效。
  • 在完成操作后及时释放对象引用,例如使用 Set obj = Nothing 来解除对象引用。
  • 避免在循环中创建对象,如果在循环内每次都创建新对象,可能会导致内存压力增大。
  • 避免过度使用动态数组,特别是在数组的大小不断变化的情况下。

五、常用内置函数

类别函数名称描述
数学函数Abs返回绝对值
Sqr返回一个数的平方根
Exp返回一个数的指数值
Log返回一个数的自然对数
Rnd返回一个介于 0 到 1 之间的随机数
Int返回小于或等于给定数值的最大整数
Fix返回小于或等于给定数值的整数部分
Round四舍五入到指定的小数位数
Cos返回一个角度的余弦值
Sin返回一个角度的正弦值
Tan返回一个角度的正切值
字符串函数Len返回字符串的字符数
Mid从指定位置提取字符串的子串
Left返回字符串的左边若干个字符
Right返回字符串的右边若干个字符
Trim去除字符串两端的空格
LTrim去除字符串左侧的空格
RTrim去除字符串右侧的空格
InStr返回子串在字符串中首次出现的位置
Replace替换字符串中的子串
UCase将字符串转换为大写
LCase将字符串转换为小写
StrComp比较两个字符串并返回比较结果
日期和时间函数Now返回当前的日期和时间
Date返回当前的日期
Time返回当前的时间
Year返回指定日期的年份
Month返回指定日期的月份
Day返回指定日期的天数
Hour返回指定时间的小时数
Minute返回指定时间的分钟数
Second返回指定时间的秒数
DateAdd在指定日期基础上添加时间间隔
DateDiff返回两个日期之间的差异
类型转换函数CInt将值转换为整数
CLng将值转换为长整数
CDbl将值转换为双精度浮动点数
CStr将值转换为字符串
CDate将值转换为日期值
CBool将值转换为布尔值
数组函数UBound返回数组的最大下标
LBound返回数组的最小下标
输入输出函数InputBox显示一个输入框,允许用户输入数据
MsgBox显示一个消息框,用于显示信息
文件和路径函数Dir返回文件或文件夹的名称
FileLen返回文件的长度
MkDir创建一个新的文件夹
RmDir删除一个文件夹
错误处理函数Err返回当前的错误号
Err.Description返回当前错误的描述
集合和对象函数IsObject判断是否为对象
数学常量和常用常量Pi数学常量 π
vbTrue布尔值 True
vbFalse布尔值 False

示例:

  1. Len 用法:

    Dim str As String
    str = "Hello, World!"
    MsgBox Len(str)  ' 结果是 13
    
  2. DateAdd 用法:

    Dim newDate As Date
    newDate = DateAdd("d", 5, Now)  ' 当前日期加上5天
    MsgBox newDate
    
  3. Round 用法:

    Dim roundedValue As Double
    roundedValue = Round(3.14159, 2)  ' 四舍五入到小数点后2位,结果是 3.14
    MsgBox roundedValue
    
  4. UCase 用法:

    Dim upperCaseStr As String
    upperCaseStr = UCase("hello")  ' 转换为大写,结果是 "HELLO"
    MsgBox upperCaseStr
    

六、VBA和宏

宏和 VBA 并不是完全一样的概念,虽然它们在很多情况下紧密相关。

  1. 宏(Macro)
    宏是一个可以自动化任务的程序,通常是由一系列的命令和操作组成。宏的主要目的是通过记录和执行用户的操作来自动化重复性任务。宏在很多应用程序中都有使用,尤其是在 Microsoft Office 软件(如 Excel、Word)中。

    • 定义:宏通常指的是在 Office 应用中自动执行一组预先定义的操作(如格式化表格、输入数据等)。
    • 录制宏:在 Excel 等应用中,可以使用 宏录制器来录制用户在界面上的操作,然后将这些操作保存为宏。录制的宏本质上是 VBA 代码。
    • 功能:宏常用于自动化用户的鼠标操作、菜单选择等,例如,在 Excel 中创建一个宏,记录填充一列数据的过程,后续可以通过运行该宏来自动完成。
  2. VBA(Visual Basic for Applications)
    VBA 是微软为 Office 应用提供的嵌入式编程语言。VBA 是一个完整的编程语言,支持面向过程的编程,可以编写复杂的逻辑、函数、类和对象等。

    • 定义:VBA 是一种嵌入在 Microsoft Office 应用程序中的编程语言,它允许用户编写脚本来自动化任务、创建用户定义的函数、进行更复杂的数据处理等。
    • 编程:通过 VBA 编辑器(VBE)编写代码来实现自动化。VBA 代码可以比宏录制器生成的代码更灵活,可以进行更复杂的控制和操作。
    • 功能:VBA 能够实现复杂的任务,超越简单的宏功能,例如与其他 Office 应用(如 Outlook、Access)进行交互、创建用户界面、处理数据库等。
  3. 宏与 VBA 的关系

    • 宏录制和 VBA 代码:当你在 Excel 等 Office 应用中录制宏时,实际上是通过 VBA 编写了一段代码。录制的宏可以在 VBA 编辑器中查看和编辑,它会生成对应的 VBA 代码。例如,Excel 中录制的宏可能会生成如下代码:
    • 简单和复杂功能:宏录制通常适用于简单、重复性的任务,而 VBA 则可以用来编写复杂的逻辑、控制流程、实现更高级的功能。
Sub Macro1()Range("A1").SelectActiveCell.FormulaR1C1 = "Hello"
End Sub

这段代码就是 VBA 编写的宏,可以进一步修改和扩展。

对比:

特性VBA
定义自动化一组简单的操作嵌入式编程语言,用于更复杂的自动化和定制任务
录制方式可以通过录制器录制用户的操作手动编写代码
灵活性通常用于简单的任务支持复杂的编程逻辑和控制结构
功能适合重复性、常规的自动化任务可以实现更高层次的自动化和应用功能
代码复杂性代码简单,通常无法修改复杂逻辑支持面向过程的编程,代码可以灵活扩展
操作平台主要用于 Office 应用嵌入在 Microsoft Office 中,支持多种任务

=====================

VBA是VB的子集,宏是VBA的一种应用形式。

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

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

相关文章

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能&#xff0c;Cherry-Pick不是merge&#xff0c;只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介&#xff1a; git cherry-pick 是用来从一个分…

mysql本地安装和pycharm链接数据库操作

MySQL本地安装和相关操作 Python相关&#xff1a;基础、函数、数据类型、面向、模块。 前端开发&#xff1a;HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端&#xff1b; Python前端&#xff1b; Go前端 -> 【动态页面】直观&#xff1a; 静态&#xff0c;写死了…

数据结构与算法之二叉树: LeetCode 654. 最大二叉树 (Ts版)

最大二叉树 https://leetcode.cn/problems/maximum-binary-tree/ 描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值递归地在最大值 左边 的 子数组前缀上 构建左子树递归地在最大值…

【Unity高级】一文了解Unity 中的条件编译(附所有指令)

一、Unity中的条件编译 Unity 对 C# 语言的支持包括使用指令&#xff0c;这些指令允许您根据是否定义了某些脚本符号&#xff0c;选择性地包含或排除代码的编译。有关这些指令在 C# 中如何工作的更多信息&#xff0c;请参阅微软关于 C# 预处理器指令 的文档。 &#xff08;一…

苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)

营业额统计 service层 在需要处理空值、与数据库交互或使用集合时&#xff0c;Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种&#xff1a; 1.一次性订阅&#xff1a;用户订阅一次就可以推送一次&#xff0c;如果需要多次提醒需要多次订阅。 2.长期订阅&#xff1a;只有公共服务领域&#xff0c;如政务、医疗、交通、金融和教育等。‌在用户订阅后&#xff0c;在很长一段时间内…

代码随想录算法训练营第 4 天(链表 2)| 24. 两两交换链表中的节点19.删除链表的倒数第N个节点 -

一、24. 两两交换链表中的节点 题目&#xff1a;24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 视频&#xff1a;帮你把链表细节学清楚&#xff01; | LeetCode&#xff1a;24. 两两交换链表中的节点_哔哩哔哩_bilibili 讲解&#xff1a;代码随想录 dummy-…

pycharm-pyspark 环境安装

1、环境准备&#xff1a;java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…

【大模型入门指南 07】量化技术浅析

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…

3DGabor滤波器实现人脸特征提取

import cv2 import numpy as np# 定义 Gabor 滤波器的参数 kSize 31 # 滤波器核的大小 g_sigma 3.0 # 高斯包络的标准差 g_theta np.pi / 4 # Gabor 函数的方向 g_lambda 10.0 # 正弦波的波长 g_gamma 0.5 # 空间纵横比 g_psi np.pi / 2 # 相位偏移# 生成 Gabor 滤…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

Vue3初学之Element-plus

用于快速的上手开发&#xff0c;以做项目为导向&#xff0c;所以借用element-plus插件 发现淘宝的镜像有时候也是很慢的&#xff0c;还可以换个 npm config set registry https://registry.npmmirror.com 安装element-plus npm install element-plus --save 查看安装是否成…

实用操作系统学习笔记

第1章 操作系统概述 操作系统基本概念 【基础知识】 操作系统&#xff1a;控制和管理整个计算机系统的硬件和软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进而为用户和其他软件提供方便接口与环境的程序集合。操作系统是计算机系统中最基本的…

k8s部署rocketmq踩坑笔记

给团队部署一个rocketmq4.8.0. k8s上部署的broker&#xff0c;注册到nameserver上是自己的pod ip&#xff0c;导致本机连接到的broker的pod ip&#xff0c;这个ip k8s集群外的机器是无法联通的。 nameserver上注册的是这个pod ipv4 尝试将broker的配置brokerIP1修改为注册到na…

UI自动化测试保姆级教程①

欢迎来到阿妮莫的学习小屋慢也好&#xff0c;步子小也好&#xff0c;在往前走就好 目录 自动化测试 简介 作用 分类 优缺点 优点 缺点(误区) UI自动化测试 自动化测试使用场景 自动化测试实现时间 Selenium框架 特点 Web自动化测试环境部署 Selenium包安装 浏览…

【2024年华为OD机试】 (A卷,100分)- 总最快检测效率(Java JS PythonC/C++)

一、问题描述 题目描述 在系统、网络均正常的情况下组织核酸采样员和志愿者对人群进行核酸检测筛查。 每名采样员的效率不同&#xff0c;采样效率为 N 人/小时。由于外界变化&#xff0c;采样员的效率会以 M 人/小时为粒度发生变化&#xff0c;M 为采样效率浮动粒度&#xf…

离线录制激光雷达数据进行建图

目前有一个2D激光雷达&#xff0c;自己控制小车运行一段时间&#xff0c;离线获取到激光雷达数据后运行如下代码进行离线建图。 roslaunch cartographer_ros demo_revo_lds.launch bag_filename:/home/firefly/AutoCar/data/rplidar_s2/2025-01-08-02-08-33.bag实际效果如下 d…

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…

QT跨平台应用程序开发框架(1)—— 环境搭建

目录 一&#xff0c;关于QT 二&#xff0c;关于应用程序框架 三&#xff0c;环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四&#xff0c;Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一&#xff0c;关于QT 互联网…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料 1. 源由 在《Open FPV VTX开源之硬件规格及组成》章节中&#xff0c;已经基本介绍了产品…