select工作表中的所有数据

我正在编写一个macros来打开一个新的工作簿,并将所有数据复制到一个不同的工作簿。 数据总是从C12开始,但是我们并不总是知道有多less行数据

以下代码给出了一个错误:

Workbooks("Somesheet.xls").Activate Sheets("Sheet1").Activate With Range("C12").Select End (xlDown) End With 

如何从C12中select所有行?

 dim rng as range with Workbooks("Somesheet.xls").Sheets("Sheet1").range("C12") set rng = range(.cells(0,0), .end(xldown)) end with 

你也可以使用

 set rng = Workbooks("Somesheet.xls").range("C12").CurrentRegion 

我使用Find来检测真正的最后一次使用的单元格,因为UsedRange可能是不可靠的,并且高估真正使用的范围的范围,除非在使用之前强制重新计算代码。 UsedRange也可能有问题,除非它从A1开始(当在C12:C40中testing数据时,我遇到了Rachel代码的问题,提供的答案是G34:G60)

从您的问题示例代码看来,您只需要C12中的C列数据(这是此代码的作用)。 它可以很容易地扩展到实际使用的列的范围内,或者如果需要,可以作为整行

 Sub GetData() Dim wb As Workbook Dim ws As Worksheet Dim rng1 As Range Dim rng2 As Range Set wb = Workbooks("SomeSheet.xlsm") Set ws = wb.Sheets("Sheet1") Set rng1 = ws.Columns("C").Find("*", ws.[c1], xlFormulas, , , xlPrevious) If rng1.Row > 12 Then Set rng2 = ws.Range(ws.[c12], rng1) MsgBox "Your range is " & rng2.Address(0, 0) Else MsgBox "Last row in " & ws.Name & " was only " & rng1.Row End If End Sub 

为了从单元格C12中select所有数据,使用UsedRange属性查找绝对最后一行。 如果C列中有一个空白单元格,其他方法将在该表的真正结束之前停止。此代码段将设置一个范围variables,该variables从C12跨越到工作表中最后一个使用的单元格:

 Dim rng As Range Dim lRowLast As Long, lColLast As Long With ActiveWorkbook.Worksheets("Sheet1") lRowLast = .UsedRange.Row + .UsedRange.Rows.Count - 1 lColLast = .UsedRange.Column + .UsedRange.Columns.Count - 1 Set rng = .Range(.Range("C12"), .Cells(lRowLast, lColLast)) End With 

注意:使用.Row + .Rows.Count - 1来处理使用范围从第一行开始的情况。

编辑:更新示例来修复@brettdj指出的错误。