我正在尝试创建一个按钮,以将给定的表重置为其。.例如默认大小和格式
我已经花了一些时间来获得 Range.Resize 属性,但是后来发现,在调整大小或缩小表之后,需要我清理所有遗留的东西。
...
Sub Bt_clear_tb1()
'ScreenUpdate
Application.ScreenUpdating = False
Application.CutCopyMode = False
'Resize and cleanup
With ActiveSheet.ListObjects("Tab1")
.Resize(.Range.Resize(10))
.ListColumns(1).DataBodyRange.ClearContents
.ListColumns(2).DataBodyRange = _ ...
.ListColumns(3).DataBodyRange = _ ...
End With
'Clear the rest | ---► Don't want it to be fixed ◄--- |
Range("A11", "Q11").Select ◄--- |
Range(Selection, Selection.End(xlDown)).Select ◄--|
Selection.ClearContents ◄--- |
'ScreenUpdate
Application.ScreenUpdating = True
End Sub
...
我当然可以手动在固定范围内工作,但是我找不到动态获取目标范围的方法。因此,如果我决定以其他方式移动或调整其大小,则不必每次都继续重写代码。
几乎以为我知道了
喜欢:
wb.ListObjects(1).Range.Cells(.Range.Rows.Count, .Range.Columns.Count).Offset(1,0).Select
Range(Selection, Selection.End(xlToLeft).End(xlDown).Select
Selection.ClearContents
但是它不是动态的。如果我将ListObjects(1)更改为其他表,它仍会清除第一个表下方的区域。
您是否知道以其他方式获取“桌子下方区域的范围”的其他方法?
〜还请,请原谅我的英语不好。。我希望这是可读的并且有道理
答案 0 :(得分:1)
像这样:
Sub Bt_clear_tb1()
Dim lSize As Long
Const ROWS2KEEP As Long = 10
'ScreenUpdate
Application.ScreenUpdating = False
Application.CutCopyMode = False
'Resize and cleanup
With ActiveSheet.ListObjects("Table1")
lSize = .ListRows.Count
.Resize (.Range.Resize(ROWS2KEEP))
.ListColumns(1).DataBodyRange.ClearContents
.ListColumns(2).DataBodyRange = "_ ..."
.ListColumns(3).DataBodyRange = "_ ..."
.Range.Offset(ROWS2KEEP).Resize(lSize - (ROWS2KEEP - 1)).ClearContents
End With
'ScreenUpdate
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
谢谢你的提示!
我发现以下方法可以解决我的问题:
Sub bt_table_1_clean()
'ScreenUpdate
Application.ScreenUpdating = False
Application.CutCopyMode = False
'@@@ Resize and cleanup
Const ROWS2KEEP As Long = 20
With ActiveSheet.ListObjects("Tab1")
.Resize (.Range.Resize(ROWS2KEEP + 1))
.ListColumns(1).DataBodyRange.ClearContents
.ListColumns(2).DataBodyRange = ...
.ListColumns(3).DataBodyRange = ...
.Range.Offset(ROWS2KEEP + 1).Resize(ActiveSheet.UsedRange.Rows.Count).ClearContents
End With
'ScreenUpdate
Application.ScreenUpdating = True
End Sub
这就是我需要的:
.Range.Offset(ROWS2KEEP + 1).Resize(ActiveSheet.UsedRange.Rows.Count).ClearContents