运用VBA操作单元格的技术
操作单元格的VBA技术也能够应用于表。
联合多个单元格区域
要选取多个单元格区域,可以使用VBA的联合运算。下面的代码选取行4、行1和行3。
代码语言:javascript复制Sub SelectMultipleRangesUnionOperator()
Union(ActiveSheet.ListObjects("myTable").ListRows(4).Range, _
ActiveSheet.ListObjects("myTable").ListRows(1).Range, _
ActiveSheet.ListObjects("myTable").ListRows(3).Range).Select
End Sub
将变量数组中的值赋给表行
要从变量数组中赋值给整行,类似使用下面的代码。
代码语言:javascript复制Sub AssignValueToTableFromArray()
'赋值给数组
Dim myArray As Variant
myArray = Range("A20:D20")
'赋数组中的值给表
ActiveSheet.ListObjects("myTable").ListRows(2).Range.Value = myArray
End Sub
引用表的某部分
可以像标准的单元格对象一样引用表。
代码语言:javascript复制Sub SelectTablePartsAsRange()
ActiveSheet.Range("myTable[区域]").Select
End Sub
统计行和列
有时候,需要统计表的行数或列数。
统计行数
可以使用下面的代码统计表的行数。
代码语言:javascript复制Sub CountNumberOfRows()
MsgBox ActiveSheet.ListObjects("myTable").ListRows.Count
End Sub
统计列数
下面的代码统计表的列数。
代码语言:javascript复制Sub CountNumberOfColumns()
MsgBox ActiveSheet.ListObjects("myTable").ListColumns.Count
End Sub
有用的表技术示例
下面是一些用于控制表的有用的VBA代码。
显示表数据记录单
如果表开始于单元格A1,那么下面的代码可以基于表显示简单的数据记录单。
代码语言:javascript复制Sub ShowDataEntryForm()
'仅运行于表开始于单元格A1
ActiveSheet.ShowDataForm
End Sub
检查表是否存在
下面的代码检查是否表已经存在于工作簿。注意,可以根据实际情况修改tblName变量来满足你的需要。
代码语言:javascript复制Sub CheckIfTableExists()
Dim ws As Worksheet
Dim tbl As ListObject
Dim tblName As String
Dim tblExists As Boolean
tblName = "myTable"
'遍历每一工作表
For Each ws In ActiveWorkbook.Worksheets
For Each tbl In ws.ListObjects
If tbl.Name = tblName Then
tblExists = True
End If
Next tbl
Next ws
If tblExists = True Then
MsgBox "表" & tblName & " 已经存在."
Else
MsgBox "表" & tblName & " 还不存在."
End If
End Sub
如果选取了表,就将其找出
下面的代码找到所选取表的名字。
方法1:
代码语言:javascript复制Sub SimulateActiveTable()
Dim ActiveTable As ListObject
On Error Resume Next
Set ActiveTable = ActiveCell.ListObject
On Error GoTo 0
'验证是否单元格在表中
If ActiveTable Is Nothing Then
MsgBox "选取表并重试."
Else
MsgBox "当前单元格所在的表名是: " & ActiveTable.Name
End If
End Sub
方法2:
下面的代码有些繁琐,遍历工作表中的每个表并检查其是否与当前单元格存在交叉。
代码语言:javascript复制Sub SimulateActiveTable_Method2()
Dim ActiveTable As ListObject
Dim tbl As ListObject
'遍历每个表, 检查是否其与当前单元格交叉
For Each tbl In ActiveSheet.ListObjects
If Not Intersect(ActiveCell, tbl.Range) Is Nothing Then
Set ActiveTable = tbl
MsgBox "当前单元格所在的表名是: " & ActiveTable.Name
End If
Next tbl
'如果没有交叉那么就是没有选取表
If ActiveTable Is Nothing Then
MsgBox "选取表并重试"
End If
End Sub