VBA:按变量选择范围

时间:2012-08-30 14:33:40

标签: vba variables range selection

我想选择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

但是,这不起作用。也许有人知道它有什么问题。非常感谢!

6 个答案:

答案 0 :(得分:28)

我录制了一个带有'Relative References'的宏,这就是我得到的:

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

下面是我的想法:如果范围选择在引号中,VBA确实需要一个STRING并解释其中的单元格,所以尝试了以下内容:

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

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

经过测试并找到了工作:

Sub Macro04()

Dim Copyrange As String

Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub

答案 1 :(得分:8)

我碰到了类似的东西 - 我想根据一些变量创建一个范围。使用Worksheet.Cells没有直接工作,因为我认为单元格的值被传递给Range。

这确实有效:

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

负责将单元格的数字位置转换为Range期望的格式。

答案 2 :(得分:7)

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

ActiveSheet.UsedRange.Select

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

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

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

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

答案 3 :(得分:4)

你错过了一个紧密的括号,I.E。你没有关闭Range()

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

但你应该看看Dick Kusleika的另一个答案,寻找可能更好的替代方案。具体而言,ActiveSheet.UsedRange.Select与您的代码具有相同的最终结果。

答案 4 :(得分:1)

你正在将它们变成一个地址,但是单元格(#,#)使用整数输入而不是地址输入,所以只需使用lastRow = ActiveSheet.UsedRange.Rows.countlastColumn = ActiveSheet.UsedRange.Columns.Count

答案 5 :(得分:1)

我尝试使用:

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

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

使用以下内容的工作是什么:

Range(Chr(64 + firstColumn) & firstRow & ":" & Chr(64 + lastColumn) & firstColumn).Select.