VBA:按变量选择范围

Fab*_*olz 11 variables vba range selection

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

lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
Run Code Online (Sandbox Code Playgroud)

在下一步中,我想选择此区域:公式应如下所示:

Range(cells(1, 1), cells(lastRow, lastColumn).Select
Run Code Online (Sandbox Code Playgroud)

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

小智 31

我用'相对参考'录制了一个宏,这就是我得到的:

Range("F10").Select
ActiveCell.Offset(0, 3).Range("A1:D11").Select
Run Code Online (Sandbox Code Playgroud)

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

Dim MyRange as String
MyRange = "A1:D11"
Range(MyRange).Select
Run Code Online (Sandbox Code Playgroud)

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

经过测试,发现有效:

Sub Macro04()

Dim Copyrange As String

Startrow = 1
Lastrow = 11
Let Copyrange = "A" & Startrow & ":" & "D" & Lastrow
Range(Copyrange).Select
End Sub
Run Code Online (Sandbox Code Playgroud)


Dav*_*ver 8

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

这确实有效:

Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select
Run Code Online (Sandbox Code Playgroud)

这就是将单元格的数字位置转换为Range期望的格式,即A1格式.


Dic*_*ika 7

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

ActiveSheet.UsedRange.Select
Run Code Online (Sandbox Code Playgroud)

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

With ActiveSheet
    .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Select
End With
Run Code Online (Sandbox Code Playgroud)

有时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
Run Code Online (Sandbox Code Playgroud)

最后,确保您只选择是否真的需要.您需要在Excel VBA中执行的大部分工作都可以直接执行到Range,而不是先选择它.代替

.Range(.Cells(1, 1), rLastCell).Select
Selection.Font.Bold = True
Run Code Online (Sandbox Code Playgroud)

您可以

.Range(.Cells(1,1), rLastCells).Font.Bold = True
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 5

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

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

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