Excel 2007表应用大全(2):使用VBA处理表
在Excel对象模型中,ListObjects对象表示表(Table)。下面列举一些在Excel 2007中使用VBA处理表的示例代码。
创建表
下面的代码将某区域转换为表。
Sub CreateTable() ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes).Name = "Table1" ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" End Sub
下面的代码改变表的格式,即改变表底部的线条样式:
Sub ChangeTableStyles() ActiveWorkbook.TableStyles(2).TableStyleElements(xlWholeTable) _ .Borders(xlEdgeBottom).LineStyle = xlDash End Sub
列出所有的表
下面的代码列出当前工作表中所有的表及其地址:
Sub FindAllTablesOnSheet() Dim oSh As Worksheet Dim oLo As ListObject Set oSh = ActiveSheet For Each oLo In oSh.ListObjects Application.Goto oLo.Range MsgBox "发现表: " & oLo.Name & ", " & oLo.Range.Address Next End Sub
在表中进行选择
下面的示例代码使用了不同的方式,选择特定的表中指定的部分。
Sub SelectingPartOfTable() Dim oSh As Worksheet Set oSh = ActiveSheet With oSh.ListObjects("Table1") MsgBox .Name '选择整个表 .Range.Select '仅选择表中的数据区域 .DataBodyRange.Select '选择第3列 .ListColumns(3).Range.Select '选择第一列中的数据区域 .ListColumns(1).DataBodyRange.Select '只选择第4行(标题行不计在内!) .ListRows(4).Range.Select End With '选择整列(仅数据) oSh.Range("Table1[列2]").Select '选择整列(数据加标题) oSh.Range("Table1[[#All],[列1]]").Select '选择表中的整个数据部分 oSh.Range("Table1").Select '选择整个表 oSh.Range("Table1[#All]").Select '选择表中的一行 oSh.Range("A5:F5").Select End Sub
插入行和列
Sub TableInsertingExamples() '在指定的位置插入 Selection.ListObject.ListColumns.Add Position:=4 '在右侧插入 Selection.ListObject.ListColumns.Add '在上方插入 Selection.ListObject.ListRows.Add (11) '在下方插入 Selection.ListObject.ListRows.Add AlwaysInsert:=True End Sub
在表中添加批注
Sub AddComment2Table() Dim oSh As Worksheet Set oSh = ActiveSheet '在表中添加一个批注 oSh.ListObjects("Table1").Comment = "这是表的批注" End Sub
将表转换为正常的区域
Sub RemoveTableStyle() Dim oSh As Worksheet Set oSh = ActiveSheet '删除表或列表样式 oSh.ListObjects("Table1").Unlist End Sub
排序和筛选
Sub SortingAndFiltering() '下面的代码仅在Excel 2007中运行 With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1") .Sort.SortFields.Clear .Sort.SortFields.Add( _ Range("Table1[[#All],[列2]]"), xlSortOnCellColor, xlAscending, , _ xlSortNormal).SortOnValue.Color = RGB(255, 235, 156) With .Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End With '下面的代码在2003中使用 ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=2, _ Criteria1:=RGB(156, 0, 6), Operator:=xlFilterFontColor End Sub
注:本文整理自Jan Karel Pieterse的《Working with Tables in Excel 2007 (VBA)》一文,供研究和参考。


































