无法在Excel VBA中select范围
我写了一个表格“A”macros,
在工作表A的变化,我想复制一个范围从工作表“C”和粘贴在工作表“D”
这个stream程很好,我可以达到目的。 问题是当我试图select表B中的范围。
rownum= 83 (I get it dynamically) colnum = 31 (Number of columns in rownum)
现在我想把第83行复制到第31行。
问题开始:
Sheets("B").Range("A83:AO83").Select ~ works like Charm
由于上述不是dynamic的,我想使用
Sheets("B").Range(Cells(rownum,1),Cells(rownum,colnum)).Select ~ Object Defined Error
有任何想法吗 !!! 我被卡住了2个小时..它没有发生。
这是代码的一部分,为了减less混淆,我没有发布所有的代码,代码停在最后一行! 对象定义错误。
Dim rownum As Integer Dim colnum As Integer rownum = Application.Match(searchFE, Sheets("Attendance").Range("D:D"), 0) colnum = Cells(rownum, Columns.Count).End(xlToLeft).Column Sheets("Attendance").Range(Cells(rownum, 1), Cells(rownum, colnum)).Select
rownum和colnum都获得价值。
我们来看看
Sheets("Attendance").Range(Cells(rownum, 1), Cells(rownum, colnum)).Select
Cells(rownum, 1)
不完全合格。 Cells
应该从哪个Sheet
明确给出。 所以假设ActiveSheet.Cells(rownum, 1)
。 这就是为什么上面的命令将失败,如果Sheets("Attendance")
不活动工作表。
... With Sheets("Attendance") .Range(.Cells(rownum, 1), .Cells(rownum, colnum)).Select End With ...
在我看来,这只是一个.address
。 当你select你的范围,你需要给地址作为input,所以基本上你唯一的错误是写:
Sheets("B").Range(Cells(rownum,1),Cells(rownum,colnum)).Select
代替:
Sheets("B").Range(Cells(rownum,1).Address(0,0),Cells(rownum,colnum).Address(0,0)).Select
我喜欢写.address(0,0)
因为它提醒我这是绝对地址(从行开始,col = 0)
我也不确定:
Sheets("Attendance").Range(Cells(rownum, 1), Cells(rownum, colnum)).Select
通常我会写:
Worksheets("Attendance").Range(Cells(rownum, 1).address(0,0), Cells(rownum, colnum).address(0,0)).Select
如果您正在使用多个工作Workbook
,请注意参阅特定的Workbook
!
如果你想要到最后一行然后使用这个代码
Sub GetThere() Dim sh As Worksheet Dim r As Long Dim c As Long Dim rng As Range Set sh = Sheets("Attendance") With sh r = .Cells(.Rows.Count, "D").End(xlUp).Row c = .Cells(r, .Columns.Count).End(xlToLeft).Column Set rng = .Range(.Cells(r, 1), .Cells(r, c)) End With Application.Goto Reference:=rng End Sub
如果你真的想要做一些范围的事情,比如把它复制到不同的位置,那就用这个代码吧。
Sub GetThere2() Dim sh As Worksheet Dim r As Long Dim c As Long Dim rng As Range Set sh = Sheets("Attendance") With sh r = .Cells(.Rows.Count, "D").End(xlUp).Row c = .Cells(r, .Columns.Count).End(xlToLeft).Column Set rng = .Range(.Cells(r, 1), .Cells(r, c)) End With rng.Copy Sheets("Sheet2").Range("A1") End Sub
如果您确实想要select范围,那么您必须确保选中该工作表。
Sub GetThere3() Dim sh As Worksheet Dim r As Long Dim c As Long Dim rng As Range Set sh = Sheets("Attendance") With sh r = .Cells(.Rows.Count, "D").End(xlUp).Row c = .Cells(r, .Columns.Count).End(xlToLeft).Column Set rng = .Range(.Cells(r, 1), .Cells(r, c)) .Select End With rng.Select End Sub