运用VBA操作单元格的技术
操作单元格的VBA技术也能够应用于表。
联合多个单元格区域
要选取多个单元格区域,可以使用VBA的联合运算。下面的代码选取行4、行1和行3。
Sub SelectMultipleRangesUnionOperator()
Union(ActiveSheet.ListObjects("myTable").ListRows(4).Range, _
ActiveSheet.ListObjects("myTable").ListRows(1).Range, _
ActiveSheet.ListObjects("myTable").ListRows(3).Range).Select
End Sub
将变量数组中的值赋给表行
要从变量数组中赋值给整行,类似使用下面的代码。
Sub AssignValueToTableFromArray()
'赋值给数组
Dim myArray As Variant
myArray = Range("A20:D20")
'赋数组中的值给表
ActiveSheet.ListObjects("myTable").ListRows(2).Range.Value = myArray
End Sub
引用表的某部分
可以像标准的单元格对象一样引用表。
Sub SelectTablePartsAsRange()
ActiveSheet.Range("myTable[区域]").Select
End Sub
统计行和列
有时候,需要统计表的行数或列数。
统计行数
可以使用下面的代码统计表的行数。
Sub CountNumberOfRows()
MsgBox ActiveSheet.ListObjects("myTable").ListRows.Count
End Sub
统计列数
下面的代码统计表的列数。
Sub CountNumberOfColumns()
MsgBox ActiveSheet.ListObjects("myTable").ListColumns.Count
End Sub
有用的表技术示例
下面是一些用于控制表的有用的VBA代码。
显示表数据记录单
如果表开始于单元格A1,那么下面的代码可以基于表显示简单的数据记录单。
Sub ShowDataEntryForm()
'仅运行于表开始于单元格A1
ActiveSheet.ShowDataForm
End Sub
检查表是否存在
下面的代码检查是否表已经存在于工作簿。注意,可以根据实际情况修改tblName变量来满足你的需要。
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:
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:
下面的代码有些繁琐,遍历工作表中的每个表并检查其是否与当前单元格存在交叉。
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