Ms Excel VBA 选择全部或 (Ctrl + A) 代码

Ms Excel VBA 选择全部或 (Ctrl + A) 代码

这是我的样本数据。

在此处输入图片描述

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"

相关内容