我正在尝试将范围作为参数传递给函数,以便我可以选择并清除它。
但是,我一直在获取Application defined / object defined错误。
如果我在clearData方法中执行此操作,我只需range("m3").select
代替range(test).select
即可。
我做错了什么?
Sub CopyData()
Call ClearData("Detailed Report", Sheets("Detailed Report").range("M3"))
Sheets("Raw Data").Select
range("A2").Select
range(Selection, Selection.End(xlToRight)).Select
range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Detailed Report").Select
range("M3").Select
ActiveSheet.Paste
End Sub
Sub ClearData(sheetName As String, range As range)
Sheets(sheetName).Select
Dim deletrange As range
Set deletrange = range
range(deletrange).Select
deletrange(Selection, Selection.End(xlToRight)).Select
deletrange(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
End Sub
答案 0 :(得分:1)
尽量不要使用range
之类的名称定义变量,因为Range
是Excel保存的单词。
此外,不需要Select
和Selection
,而是使用完全合格的范围和工作表。
注意:请注意,使用End(xlDown)
和End(xlToRight)
获取最后一行和列并不是最安全的方法。如果要将连续范围与“M3”一起使用,请使用Range("M3").CurrentRegion
。
如果您想获得整个工作表的范围,包括中间的空行和列,请使用:
要使用最后一行:
Sheets("Detailed Report").Cells(Sheets("Detailed Report").Rows.Count, "M").End(xlUp).Row
要使用Last列:
Sheets("Detailed Report").Cells(3, Sheets("Detailed Report").Columns.Count).End(xlToLeft).columnn
代码
Sub CopyData()
ClearData "Detailed Report", Sheets("Detailed Report").Range("M3")
' Copy >> Paste in 1 line (without Selecting)
Sheets("Raw Data").Range("A2").Resize(Sheets("Raw Data").Range("A2").End(xlDown).Row, Sheets("Raw Data").Range("A2").End(xlToRight).Column).Copy _
Sheets("Detailed Report").Range("M3")
End Sub
'=====================================================================
Sub ClearData(sheetName As String, Rng As Range)
' the code line below uses your original method, less recommended
Rng.Resize(Rng.End(xlDown).Row, Rng.End(xlToRight).Column).ClearContents
' better of using the code line below:
Rng.CurrentRegion.ClearContents
End Sub
答案 1 :(得分:0)
传递纸张是过度的,你只能通过范围。
如果您要传递工作表,请将其作为对象传递,而不是工作表名称。
CurrentRegion
也足以满足您的需求
Sub Better()
Dim rng1 As range
On Error Resume Next
Set rng1 = Sheets("Detailed Report").[m3]
On Error GoTo 0
If Not rng1 Is Nothing Then Call ClearData(rng1)
End Sub
清除代码
Sub ClearData(rng1 As range)
rng1.CurrentRegion.ClearContents
End Sub