Excel VBA 语法基础

news2024/11/23 4:43:03

VBA(Visual Basic for Applications)是一种用于宏编程和自动化任务的编程语言,广泛应用于 Microsoft Office 套件中的各种应用程序,如 Excel、Word 和 PowerPoint。掌握 VBA 基础语法可以帮助您通过编写自定义的宏来增强和自动化这些应用程序的功能。

本文将介绍 Excel VBA 的基础语法,帮助您入门这一强大的编程语言。

1、VBA 的基本结构。

VBA 的代码以 Sub 和 End Sub 之间的块(称为“过程”)的形式组织。一个过程可以是一个宏或一个子例程。

下面是一个简单的示例:

Sub HelloWorld() '过程的名称不能以数字开头,不能有空格,可以是中文
    MsgBox "Hello, World!"
End Sub

在这个示例中,Sub 关键字定义了一个过程名为 HelloWorld 的宏,宏中的代码通过 MsgBox 函数显示一条消息框。

2、注释。

注释用于向代码添加说明和解释,对于代码的可读性和维护性非常重要。

在 VBA 中,可以使用单引号(')来表示注释,注释后的内容将被视为注释而不会被执行。

' 这是一个注释

3、变量和数据类型。

在 VBA 中,可以使用变量来存储和操作数据。变量在使用前需要进行声明,并指定其数据类型。

常见的数据类型包括:整数(Integer)、长整数(Long)、单精度浮点数(Single)、双精度浮点数(Double)、字符串(String)、布尔型(Boolean)、日期(Date)、可变(Variant)等。

定义变量:

Dim [变量名] As [数据类型]

Dim age As Integer
age = 25


Dim name As String
name = "MediaTea"

定义常量:

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

Const PI As Single = 3.1415926

定义数组:

Dim [数组名]( )

数组声明的方式与声明变量相同,只是数组变量的声明使用括号。

Dim arr(5) '若数组下标从 0 开始时,它可以保持 6 个值


Dim arr1(0 To 3, 0 To 4) As Variant '定义一个三行四列的二维数组


arr2 = Array(1, 2, 3, 4, 5) '使用 Array 方法定义数组


arrStr = Split("apple,banana,orange", ",") '使用Split函数将字符串转换为数组


arr(0) = "MediaTea"
arr(1) = 100
arr(2) = 3.14
arr(3) = True  '布尔型
arr1(0, 1) = #6/18/2023#   '日期
arr1(2, 3) = #12:45:00 PM# '时间


If arr(3) Then
  MsgBox arrStr(0) '显示 apple
End If


If arr2(3) < 5 Then
  MsgBox arr(0) '显示 MediaTea
End If

4、运算符。

4.1 算术操作符

+ (加)、 - (减)、 * (乘)、 / (除)、  % (求余) 、 ^ (乘方) 

4. 2 关系运算符

= (等于)、 <> (不等于)、 > (大于)、 < (小于)、 >= (大于等于)、 <= (小于等于)

4.3 逻辑运算符

AND (与)、 OR (或)、 NOT (非)、 XOR (异或)

4.4 连接操作符

& (连接)、 + (字符串连接)

Dim a, b As Integer
a = 15
b = 5
MsgBox (a + b) * 2 '结果为 40
MsgBox ("15" + "5") * 2 '结果为 310
MsgBox a & b '结果为 155

5、条件语句。

条件语句用于根据条件的真假来执行不同的代码块。在 VBA 中,常见的条件语句有 If 语句和 Select Case 语句。示例如下:

If 语句:

Dim score As Integer
score = 85


If score >= 90 Then
    MsgBox "优秀"
ElseIf score >= 80 Then
    MsgBox "良好"
ElseIf score >= 70 Then
    MsgBox "中等"
Else
    MsgBox "不及格"
End If

Select Case 语句:

Dim dayOfWeek As String
dayOfWeek = "Monday"


Select Case dayOfWeek
    Case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"
        MsgBox "工作日"
    Case "Saturday", "Sunday"
        MsgBox "周末"
    Case Else
        MsgBox "无效的输入"
End Select

6、循环结构。

循环结构用于重复执行一段代码。在 VBA 中,常见的循环结构有 For 循环和 Do While 循环。示例如下:

For Next 循环:

Dim i As Integer


For i = 1 To 5 Step 1
     Debug.Print i  '在立即窗口显示 i 值
Next i

For Each 循环:

'常用于列举数组或集合中的每个元素
fruits = Array("苹果", "香蕉", "雪梨")
For Each Item In fruits
    MsgBox Item
Next

Do While 循环:

Dim x As Integer
x = 2
Do While x <= 10
 Cells(x, 5).Value = 100 '将 E2:E10 单元格填充为 100
 x = x + 1
Loop

7、函数和过程。

函数和过程用于封装可重用的代码块。函数可以返回一个值,而过程不返回值。

在 VBA 中,可以使用 Function 关键字定义函数,使用 Sub 关键字定义过程。示例如下:

函数:

Function AddNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
    AddNumbers = num1 + num2
End Function

过程:

Sub Greet(ByVal name As String)
    MsgBox "Hello, " & name & "!"
End Sub

8、Excel VBA 常用对象及方法。

8.1 单元格对象相关

Range、[ ]、Cells(行号,列号)

a = Range("A1") '表示 A1 单元格
Range("C1") = Application.Sum(Range("A1:A9"))   '对 A1 到 A9 单元格求和,并将结果放在 C1 单元格


[A1] = "MediaTea"    '对 A1 单元格填充字符串
d = [A1:A9]    '表示 A1 到 A9 单元格


e = Cells(2, 3) '表达第 2 行第 3 列的单元格,即 C2 单元格

End( )、Offset(行数,列数 )

Dim x As Integer, y As Integer
x = Range("B2").End(xlDown).Row '返回 B2 下方有内容的单元格的行数。


Range("B2").End(xlDown).Offset(1, 0).Value = 100 '将 B2 下方最后一个有内容的单元格下面的单元格赋值。


'对 B2 下方所有有内容的单元格右侧的 E 列单元格赋值
For x = 2 To Range("B2").End(xlDown).Row
   Cells(x, 5).Value = 100 
Next x

8.2 单元格操作相关

比如,获取单元格的值、对单元格进行赋值、设置单元格的格式、对单元格进行复制或剪切,等等。

'对当前工作簿中的 Sheet1 工作表中的 A1 单元格赋值
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "MediaTea"


'显示当前工作表中的 A1 单元格的值
MsgBox Range("A1")


'设置单元格的填充色
Range("A1").Interior.ColorIndex = 24


'设置单元格的字体大小
Range("A1").Font.Size = 12


'为当前选中的单元格(区域)设置字体颜色
Selection.Font.Color = RGB(255, 0, 0)


'清除单元格内容
Range("A1").ClearContents
             
'将 B3 的值复制到 C3 单元格
Range("A1").Copy Range("C3")


'将 C3 的值剪切到 D3 单元格
Range("C3").Cut Range("D3")

通过以上介绍,您已经了解了 VBA 的基础语法。掌握 VBA 基础语法可以为您编写自定义的宏提供基础,进一步开发更复杂的功能和自动化任务。

随着实践和学习的深入,您可以掌握更多高级的 VBA 技巧和概念,并灵活应用于实际项目中。

94454ddc6acfc24154c0e6945b67d0ec.jpeg

“点赞有美意,赞赏是鼓励”

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

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

相关文章

python:使用Scikit-image对遥感影像进行角点检测特征提取(corner)

作者:CSDN @ _养乐多_ 本文将介绍使用Scikit-image对遥感影像进行角点检测特征(corner)提取的一些方法及其代码。方法包括 Harris角点检测(corner_harris),Shi-Tomasi角点检测(corner_shi_tomasi),Foerstner角点检测(corner_foerstner),FAST角点检测(corner_fast…

VUE 2X 计算监视属性 ⑥

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs计算属性 C o m p u t e d Computed Computed监视属性 W a t c h Watch Watch总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;…

Apache Superset产品调研

Apache Superset产品调研 调研报告&#xff1a;Apache Superset 一、概述 Apache Superset是一个开源的数据可视化和数据探索平台&#xff0c;它提供了一个用户友好的界面&#xff0c;可以轻松地创建和分享仪表板。它支持多种数据源&#xff0c;包括SQLAlchemy兼容的数据库、…

io.netty学习(九)Netty 如何实现零拷贝

目录 前言 Java 实现零拷贝 1、Java提供 mmap/write 方式 2、Java 提供 sendfile 方式 Netty 实现零拷贝 1、CompositeByteBuf 方式 2、wrap 方式 3、slice 方式 4、 FileRegion 方式 总结 前言 本篇文章我们就来讲讲 Netty 的零拷贝&#xff0c;在这之前&#xff0…

数据结构练习题1:基本概念

练习题1&#xff1a;基本概念 1 抽象数据类型概念分析2. 逻辑结构与存储结构概念分析3.综合选择题4.综合判断题5.时间复杂度相关习题 1 抽象数据类型概念分析 1.可以用&#xff08;抽象数据类型&#xff09;定义一个完整的数据结构。 分析&#xff1a; 1&#xff09;抽象数据…

【Leetcode -617.合并二叉树 -1022.从根到叶的二进制数之和】

Leetcode Leetcode -617.合并二叉树Leetcode -1022.从根到叶的二进制数之和 Leetcode -617.合并二叉树 题目&#xff1a;给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#x…

ESP32-IDF VS Code进行开发

ESP32-C3 入门篇&#xff08;二&#xff09;使用VS Code进行开发 文章目录 前言 总结STM32的成功&#xff0c;除了Cortex M3的性能强之外&#xff0c;也离不开ST推出的标准库及简单易用的MDK IDE。完善的开发配套&#xff0c;极大的降低了开发门槛&#xff0c;让开发者更专注…

python:使用Scikit-image对遥感影像做空间滤波(中值,高斯,Sobel,Laplace,Scharr等)

作者:CSDN @ _养乐多_ 本文将介绍使用Scikit-image中的滤波函数对遥感影像做空间滤波的代码。滤波方法包括:中值滤波器,高斯滤波器,Sobel滤波器,Laplace滤波器,Scharr滤波器等。并将原始影像和结果影像绘制成图。 结果如下图所示, 文章目录 一、空间滤波函数详解二、…

RocketMQ发送消息

一.消费模式 MQ的消费模式可以大致分为两种&#xff0c;一种是 推Push&#xff0c;一种是 拉Pull。 Push 是 服务端 (MQ) 主动推送消息给客户端&#xff0c;优点是及时性较好&#xff0c;但如果客户端没有做好流控&#xff0c;一旦服务端推送大量消息到客户端时&#xff0c;…

分布式光伏电站智能管理系统

随着能源需求的增加&#xff0c;各种各样的光伏电站工程建设出现不同形式的技术缺陷。设计了分布式光伏电站区域智能系统&#xff0c;实现 了各个园区用电数据的集中管理。对光伏电站分布式运营管理进行了研究&#xff0c;采用集中运营管理中心的方法&#xff0c;建立了区域分布…

蓝牙L2CAP协议简介及报文格式

概述 逻辑链路控制和适配协议&#xff08;Logical Link Control and Adaptation Protocol&#xff0c;L2CAP&#xff09;是蓝牙的核心协议&#xff0c;负责适配基带中的上层协议。它同链路管理器并行工作&#xff0c;向上层协议提供定向连接的和无连接的数据业务。L2CAP具有分…

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像写入相机内存&#xff08;C&#xff09; Baumer工业相机Baumer工业相机BGAPISDK和相机内存的技术背景Baumer工业相机通过BGAPISDK将相机图像写入相机内存功能1.引用合适的类文件2.通过BGAPISDK将相机图像写入相机内存功能…

Cortext-M3系统:异常(3)

1、异常 异常响应系统是再M3内核水平上的&#xff0c;支持众多的系统异常和外部中断。1-15为系统异常&#xff0c;大于16为外部中断。除了个别异常的优先级被定死外&#xff0c;其它异常的优先级都是可编程的。优先级数值越小&#xff0c;优先级越高。CM3支持中断嵌套&#xff…

网络嗅探与ARP欺骗

目录 一、网络嗅探概述 1.1 网络嗅探的概念 1.1.2 一把双刃剑 1.1.3 特点 1.2 网络嗅探的原理 1.2.1 网络嗅探的条件 1.2.2 网卡的工作模式 1.2.3 局域网的传输技术 1.3 网络嗅探的前提 1.3.1 网卡设置为混杂模式 1.3.2 同处在一个广播式局域网内 1.4 嗅探工具的使…

4.23 TCP状态转换 4.24半关闭、端口复用

4.23 TCP状态转换 2MSL(Maximum Segment Lifetime) 主动断开连接的一方&#xff0c;最后进入一个TIME_WAIT状态&#xff0c;这个状态会持续&#xff1a;2msl msl&#xff1a;官方建议&#xff1a;2分钟&#xff0c;实际是30s 当 TCP 连接主动关闭方接收到被动关闭方发送的 FIN…

【kubernetes】部署kube-apiserver与kubectl

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

Flutter 组件集录 | RawMagnifier 组件 - 拿起你的八倍镜

theme: cyanosis 1. 前言 今天看 Flutter 源码&#xff0c;偶然发现 Magnifier 组件&#xff0c;这单词不就是 放大镜 嘛! 再结合新版 Flutter 中输入文本的放大镜效果&#xff0c;直觉告诉我这玩意应该可以放大任何组件。如下所示&#xff0c;背景是一张图片&#xff0c;使用 …

0013-TIPS-pawnyable : Race-Condition

原文 Linux Kernel PWN | 040204 Pawnyable之竞态条件 Holstein v4: Race Condition 题目下载 漏洞代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/uaccess.h> #i…

使用 Vite + Vue3 + Element-Plus + Pinia + Ts 搭建 Vue3 项目

使用 Vite Vue3 Element-Plus Pinia Ts 搭建 Vue3 项目 使用Vite搭建配置Router配置 Element-Plus配置sass配置Pinia配置解析 符号&#xff0c;并找到对应的路径TypeScript忽略类型检查 使用Vite搭建 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模…

chatgpt赋能python:Python指定小数点位数的完整指南

Python指定小数点位数的完整指南 Python是一种高级编程语言&#xff0c;广泛用于科学、统计和数学计算。在许多情况下&#xff0c;我们需要对浮点数进行更精确的计算。Python 中保留小数位数的能力很强&#xff0c;本文将向您介绍如何在 Python 中指定小数点后的位数。 为什么…