15

我想选择 Excel 工作表的格式化范围。要定义最后一行和第一行,我使用以下函数:

lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

在下一步中,我想选择这个区域: 公式应该是这样的:

Range(cells(1, 1), cells(lastRow, lastColumn).Select

但是,这是行不通的。也许有人知道它有什么问题。非常感谢!

4

6 回答 6

46

我用“相对引用”录制了一个宏,这就是我得到的:

Range("F10").Select
ActiveCell.Offset(0, 3).Range("A1:D11").Select

这是我的想法:如果范围选择用引号引起来,VBA 真的想要一个字符串并解释其中的单元格,所以尝试了以下操作:

Dim MyRange as String
MyRange = "A1:D11"
Range(MyRange).Select

它起作用了:) ie.. 只需使用您的变量创建一个字符串,确保将其标注为 STRING 变量,Excel 将立即读取它;)

以下测试并发现工作:

Sub Macro04()

Dim Copyrange As String

Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub
于 2012-11-30T06:59:10.510 回答
13

我遇到了类似的事情——我想根据一些变量创建一个范围。使用 Worksheet.Cells 不能直接工作,因为我认为单元格的值已传递给 Range。

这确实有效:

Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select

这负责将单元格的数字位置转换为 Range 所期望的,即 A1 格式。

于 2015-03-25T19:29:08.813 回答
7

如果您只想选择使用的范围,请使用

ActiveSheet.UsedRange.Select

如果要从 A1 选择到使用范围的末尾,可以像这样使用 SpecialCells 方法

With ActiveSheet
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select
End With

有时 Excel 会对最后一个单元格感到困惑。它永远不会比实际使用的范围更小,但如果某些单元格被删除,它可能会更大。为避免这种情况,您可以使用 Find 和星号通配符来查找真正的最后一个单元格。

Dim rLastCell As Range

With Sheet1
    Set rLastCell = .Cells.Find("*", .Cells(1, 1), xlValues, xlPart, , xlPrevious)

    .Range(.Cells(1, 1), rLastCell).Select
End With

最后,请确保仅在确实需要时进行选择。您需要在 Excel VBA 中执行的大部分操作都可以直接对 Range 执行,而不是先选择它。代替

.Range(.Cells(1, 1), rLastCell).Select
Selection.Font.Bold = True

你可以

.Range(.Cells(1,1), rLastCells).Font.Bold = True
于 2012-08-30T14:58:56.367 回答
5

您缺少一个右括号,即您没有关闭Range().

尝试这个Range(cells(1, 1), cells(lastRow, lastColumn)).Select

但是你真的应该看看迪克库斯莱卡的另一个答案,寻找可能更好地为你服务的替代方案。具体来说,ActiveSheet.UsedRange.Select它与您的代码具有相同的最终结果。

于 2012-08-30T15:29:56.217 回答
1

您正在将它们转换为地址,但 Cells(#,#) 使用整数输入而不是地址输入,因此只需使用lastRow = ActiveSheet.UsedRange.Rows.countlastColumn = ActiveSheet.UsedRange.Columns.Count

于 2013-06-28T11:31:18.253 回答
1

我尝试使用:

Range(cells(1, 1), cells(lastRow, lastColumn)).Select 

其中lastRowlastColumn是整数,但收到运行时错误 1004。我使用的是较旧的 VB (6.5)。

起作用的是使用以下内容:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select.  
于 2014-09-23T18:23:38.847 回答