VBA基础知识
VBA基础知识
基础知识和常用操作
这些文件内容主要涉及VBA(Visual Basic for Applications)编程语言的基础知识和一些常用操作。以下是对这些内容的简要总结:
- VBA基础语法:
- VBA不需要语句结束符分号。
- 使用
InputBox函数获取用户输入,输入内容存储为字符串类型。 - 使用
MsgBox函数显示信息提示框。 - 变量声明和使用。
- 使用
Timer函数获取计算机时间,计算程序运行时间。
- 循环和判断:
For循环的写法,包括步长控制。If判断语句的多种写法。
- 工作簿和工作表操作:
- 使用
Workbooks对象操作工作簿,如获取工作簿名称、新建、打开和关闭工作簿。 - 使用
Sheets对象操作工作表,如获取工作表名称、删除工作表、重命名工作表。 - 使用
Range对象操作单元格,如获取单元格值、设置单元格颜色、复制单元格内容。
- 使用
- 单元格及数据边界和区域操作:
- 使用
End方法获取数据边界,类似于Excel中的Ctrl + 方向键操作。 - 使用
UsedRange属性获取工作表中使用的区域。 - 使用
CurrentRegion属性获取单元格所在的区域。 - 获取单元格的行号和列号。
- 使用
Rows和Columns属性获取行和列的集合。 - 使用
Cells方法选择特定单元格。
- 使用
举例
1. VBA基础语法
输入框和提示框
Sub InputAndMessageBox()
Dim userInput As String
userInput = InputBox("请输入内容:") ' 获取用户输入
MsgBox "您输入的内容是:" & userInput ' 显示输入内容
End Sub
InputBox可以直接用户的输入,类型为String
计算程序运行时间
Sub CalculateRunTime()
Dim startTime As Double
startTime = Timer ' 获取当前时间
' 模拟程序运行
Dim i As Integer
For i = 1 To 1000000
' 空循环,模拟耗时操作
Next i
MsgBox "程序运行时间:" & Timer - startTime & "秒" ' 显示运行时间
End Sub
2. 循环和判断
For 循环
Sub ForLoopExample()
Dim i As Integer
'第一种写法,默认步长为1:
'i = star To end
For i = 1 To 10
MsgBox "当前循环次数:" & i
Next i
'第二种写法,自定义步长
'i = star To end step xxx
For i = 1 To 10 step 2
MsgBox "当前循环次数:" & i
Next i
'第三种写法,不指定开始结尾,类似增强for循环
For Each i in Range(xxx,xxx)
MsgBox "当前循环次数:" & i
Next i
End Sub
If 判断
Sub IfExample()
Dim num As Integer
num = 10
'看情况要不要 ElseIf 和 Else
If num > 5 Then
MsgBox "数字大于5"
ElseIf num = 5 Then
MsgBox "数字等于5"
Else
MsgBox "数字小于5"
End If
End Sub
3. 工作簿和工作表操作
获取工作簿名称
Sub GetWorkbookName()
Dim wbName As String
wbName = ActiveWorkbook.Name ' 获取活动工作簿名称
MsgBox "当前工作簿名称:" & wbName
End Sub
重命名工作表
Sub RenameSheet()
Sheets(1).Name = "NewSheetName" ' 将第一个工作表重命名
MsgBox "工作表已重命名为:" & Sheets(1).Name
End Sub
删除工作表
Sub DeleteSheet()
Sheets(2).Delete ' 删除第二个工作表
MsgBox "第二个工作表已删除"
End Sub
新建工作簿并命名
Sub CreateNewWorkbook()
Dim newWorkbook As Workbook
Set newWorkbook = Workbooks.Add ' 新建工作簿
newWorkbook.SaveAs Filename:="C:\NewWorkbook.xlsx" ' 保存并命名
MsgBox "新工作簿已创建并保存为:C:\NewWorkbook.xlsx"
End Sub
获取工作表的已用区域
Sub GetUsedRange()
Dim usedRows As Long
Dim usedCols As Long
usedRows = ActiveSheet.UsedRange.Rows.Count ' 获取已用区域的行数
usedCols = ActiveSheet.UsedRange.Columns.Count ' 获取已用区域的列数
'"_"表示代码连接符,即如果代码一行太长想要转行则必须使用连接符
MsgBox "已用区域的行数:" & usedRows & vbCrLf & _
"已用区域的列数:" & usedCols
End Sub
4. 单元格操作
- 单元格的表示除了使用
Range,还可以使用Cells,可以使用单元格简写[A1] Range表示的是一个区域(单元格范围):Range("A1:C1"),如果里面只有一个值表示的是一个单元格Range里面的参数是字符串,所以可以使用拼接的方式表示,如果在循环里面使用Range,可以用Range("B"&i)Cells(row,col),里面的参数是行和列
设置单元格值
Sub SetCellValue()
Range("A1").Value = 100 ' 设置A1单元格的值为100
MsgBox "A1单元格的值已设置为:" & Range("A1").Value
End Sub
获取单元格的行号和列号
Sub GetRowAndColumn()
Dim rowNum As Long
Dim colNum As Long
rowNum = Range("B2").Row ' 获取B2单元格的行号
colNum = Range("B2").Column ' 获取B2单元格的列号
MsgBox "B2单元格的行号:" & rowNum & vbCrLf & _
"B2单元格的列号:" & colNum
End Sub
复制单元格内容
Sub CopyCellContent()
Range("A1").Copy Destination:=Range("B1") ' 将A1的内容复制到B1
MsgBox "A1的内容已复制到B1"
End Sub
设置单元格颜色
Sub SetCellColor()
Range("A1").Interior.ColorIndex = 3 ' 设置A1单元格的背景颜色为红色
MsgBox "A1单元格的背景颜色已设置为红色"
End Sub
动态获取选中单元格
'选中指定区域或单元格
Range("A1:C1").Select
Range("A1").Select
'选中A列的最后一个单元格
Cells(Rows.Count,"A").Select
'选中第一行的最后一个单元格
Cells(1,Column.Count).Select
Rows.Count:返回当前工作表中的总行数。
Column.Count:返回当前工作表中的总列数。
.Select:选择该单元格。
5. 数据边界和区域操作
获取数据边界
Sub GetDataBoundary()
Dim lastRow As Long
Dim lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 获取A列最后一个非空单元格的行号
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column ' 获取第一行最后一个非空单元格的列号
MsgBox "A列最后一个非空单元格的行号:" & lastRow & vbCrLf & _
"第一行最后一个非空单元格的列号:" & lastCol
End Sub
end(xlUp):相当于Ctrl + ↑
end(xlDown):相当于Ctrl + ↓
end(xlToLeft):相当于Ctrl + ←
end(xlToRight):相当于Ctrl + →
使用方法为:基准单元格.end(xxx),例如:[A1].end(xlUp)
综合示例
遍历单元格并设置条件格式
Sub ConditionalFormatting()
Dim i As Long, j As Long
Dim startRow As Long, endRow As Long
Dim startCol As Long, endCol As Long
startRow = 1
startCol = 1
endRow = 10
endCol = 5
For i = startRow To endRow
For j = startCol To endCol
If Cells(i, j).Value < 50 Then
Cells(i, j).Interior.ColorIndex = 6 ' 设置背景颜色为黄色
End If
Next j
Next i
MsgBox "条件格式设置完成"
End Sub

浙公网安备 33010602011771号