参考资料
- 跟着孙兴华学习Excel VBA 第一季
👉以下所有VBA代码,都来自参考资料中的B站课程。
👉所有整理皆为学习VBA,仅做笔记之用。
目录
- 一. 批量创建sheet页
- 二. 批量删除当前sheet页之外的所有sheet
- 三. 获取所有sheet页的名称
- 四. 删除指定工作表
一. 批量创建sheet页
- VBA代码所在sheet页的A1单元格为标题,A2,A3,A4等单元格的内容为要新建sheet页的名称
shtActive.Cells(Rows.Count, 1).End(xlUp).Row
- Rows.Count:返回工作表的总行数,1 表示第一列。这样可以确保我们在整个第1列中寻找最后一个单元格。
- .End(xlUp):在当前单元格所在列中向上查找并返回第一个非空单元格的方法。对于第1列来说,它会从底部开始向上查找,直到找到第一个非空单元格。
- .Row:返回找到的单元格所在的行号。
Sub CreatSht()Dim shtActive As Worksheet, sht As WorksheetDim i As Long, strShtName As String' 当代码出错时继续运行On Error Resume NextSet shtActive = ActiveSheet' 单元格A1是标题,跳过,从第2行开始遍历sheet页名称For i = 2 To shtActive.Cells(Rows.Count, 1).End(xlUp).Row' sheet页对象强制转换为字符串类型strShtName = shtActive.Cells(i, 1).Value' 根据sheet名称获取sheet对象(若不存在该sheet名称的话,会报错,然后被 If Err Then 捕获)Set sht = Sheets(strShtName)' 如果代码出错,说明不存在工作表Sheet,然后就新建If Err Then' 新建一个sheet页,位置放在所有已存在sheet页的后面Worksheets.Add , Sheets(Sheets.Count)' 新建的sheet必然是活动的sheet,为之命名ActiveSheet.Name = strShtName' 清除错误状态Err.ClearEnd IfNext' 重新激活原sheetshtActive.Activate
End Sub
二. 批量删除当前sheet页之外的所有sheet
On Error Resume Next
:VBA 中用于错误处理的语句,当发生运行时错误时,忽略错误并继续执行下一行代码,而不是中断程序并显示错误消息。
Sub DelShet() ' 删除所有工作表Dim sht As Worksheet' 关屏幕刷新Application.ScreenUpdating = False' 关警告信息Application.DisplayAlerts = False On Error Resume NextFor Each sht In Worksheets' 遍历删除sheetsht.Delete NextApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub
三. 获取所有sheet页的名称
在VBA中,Range
和 Cells
是用于引用 Excel 工作表单元格的两种不同方式
- 引用方式
- Range:
Range("A1")
,Range("A1:B10")
表示范围引用。 - Cells:
Cells(row, column)
,表示行号和列号,Cells(1, 1)
表示第 1 行第 1 列的单元格。
- Range:
- 特性
- Range: 可以用来引用任何范围,包括单个单元格、多个单元格、整行、整列或具有特定命名的范围。
- Cells: 主要用于引用单个单元格,可以通过行号和列号准确地指定单元格的位置。
Sub GetShtByVba()Dim sht As Worksheet, k As LongApplication.ScreenUpdating = Falsek = 1' 清空a列和b列的数据Range("A:B").Clear' 设置a列的单元格格式为文本Range("A:A").NumberFormat = "@"' 遍历各sheet对象,获取sheet页名称For Each sht In Worksheets' 行自增长(从A2单元格开始)k = k + 1' 将sheet页名称放入单元格内(A1单元格,A2单元格,A3单元格...)Cells(k, 1) = sht.NameNext' 设置A1单元格的内容Range("A1") = Array("工作表名")Application.ScreenUpdating = TrueEnd Sub
四. 删除指定工作表
Dim a1CurrentRegion
:在 VBA 中,变量可以是弱类型或者强类型的。变量 a1CurrentRegion 没有明确指定数据类型,因此它被认为是 Variant 类型的变量。
Variant 类型是一种通用的数据类型,可以存储各种类型的数据,包括数字、文本、日期、数组等。UBound()
:VBA 中的一个函数,用于返回数组的最大索引值。
Sub DelShtByVba()Dim sht As WorksheetDim i As Long' A1单元格所在的区域的数据对象Dim a1CurrentRegionApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False' VBA 中用于错误处理的语句,当发生运行时错误时,忽略错误并继续执行下一行代码,而不是中断程序并显示错误消息。On Error Resume Next' Range("A1").CurrentRegion 是 VBA 中用于获取包含指定单元格的当前区域的方法。' 返回一个表示当前区域的 Range 对象,该区域由指定单元格所在的连续区域组成' 这个连续区域包括所有具有数据的相邻单元格。a1CurrentRegion = Range("a1").CurrentRegion ' 遍历并删除工作表For i = 2 To UBound(a1CurrentRegion)' 如果i行,第2列的值为删除的话If a1CurrentRegion(i, 2) = "删除" Then ' 删除i行第1列所对应的sheet页 Worksheets(CStr(a1CurrentRegion(i, 1))).DeleteEnd IfNextApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub