这是我的样本数据。
A1:C3
这是我选择里面的所有内容(ctrl + A) ,然后更改表格格式时使用宏生成的 VBA 代码。
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A1:C3").Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$3"), , xlYes).Name = _
"Table1"
Range("Table1[#All]").Select
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleMedium9"
End Sub
输出
当我有更多数据,比如说更大的范围时,问题就开始了A1:C4
。
上面的代码不会选择全部,而是仅选择A1:C3
。
A4:C4
此代码不会影响最后一行。
无论桌子有多大,我该如何改变这种情况?
答案1
相当于Ctrl + A
进入该CurrentRegion
部分
使用范围- 所有单元格(含值)
要包含所有内容,您可以对代码进行最简单的更改,将其更改Range("$A$1:$C$3")
为ActiveSheet.UsedRange
。
请注意,这将创建一个表以包含一切在工作表中,因此如果其中有其他数据,则需要采用不同的方法。如果您希望包含所有内容,那么很好,您可以根据需要修剪一些代码:
Sub Macro1()
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.UsedRange, , xlYes).Name = _
"Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleMedium9"
End Sub
当前区域- 所有连接的单元格(带有值)
如果您想要一种更受约束的方法,您可以改用CurrentRegion
。
如果您知道表格将始终包含例如,A1
那么您可以改用Range("A1").CurrentRegion
:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = _
"Table1"
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleMedium9"
如果没有给定位置,您甚至可以在运行之前选择一个单元格,然后使用它Selection.CurrentRegion
。
使用以下代码运行示例:
Sub Macro1()
Set objListObject = ActiveSheet.ListObjects.Add(xlSrcRange, Selection.CurrentRegion, TableStyle = "TableStyleMedium9")
End Sub
答案2
在下面的代码中,您仅选择并分配 A1:C3 范围内的数据。
Range("A1:C3").Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$3"), , xlYes).Name = _
"Table1"
无法根据您的动态范围随时更改代码,这次您需要包含 A4:C4 范围,但下次您可能会包含 A5:C5,代码将不会适应。
你需要做的就是每次改变范围的时候手动改一下,把上面两段里的参数改一下,比如需要包含A4:C4,那么A1:C3对应的两段就需要改成A1:C4:
Range("A1:C4").Select
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$4"), , xlYes).Name = _
"Table1"