VBA基础知识

VBA基础知识

基础知识和常用操作

这些文件内容主要涉及VBA(Visual Basic for Applications)编程语言的基础知识和一些常用操作。以下是对这些内容的简要总结:

  1. VBA基础语法
    • VBA不需要语句结束符分号。
    • 使用InputBox函数获取用户输入,输入内容存储为字符串类型。
    • 使用MsgBox函数显示信息提示框。
    • 变量声明和使用。
    • 使用Timer函数获取计算机时间,计算程序运行时间。
  2. 循环和判断
    • For循环的写法,包括步长控制。
    • If判断语句的多种写法。
  3. 工作簿和工作表操作
    • 使用Workbooks对象操作工作簿,如获取工作簿名称、新建、打开和关闭工作簿。
    • 使用Sheets对象操作工作表,如获取工作表名称、删除工作表、重命名工作表。
    • 使用Range对象操作单元格,如获取单元格值、设置单元格颜色、复制单元格内容。
  4. 单元格及数据边界和区域操作
    • 使用End方法获取数据边界,类似于Excel中的Ctrl + 方向键操作。
    • 使用UsedRange属性获取工作表中使用的区域。
    • 使用CurrentRegion属性获取单元格所在的区域。
    • 获取单元格的行号和列号。
    • 使用RowsColumns属性获取行和列的集合。
    • 使用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
posted @ 2025-03-21 22:28  kokoasann  阅读(150)  评论(0)    收藏  举报