无法在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