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)
我碰到了类似的东西 - 我想根据一些变量创建一个范围.使用Worksheet.Cells没有直接工作,因为我认为单元格的值传递给Range.
这确实有效:
Range(Cells(1, 1).Address(), Cells(lastRow, lastColumn).Address()).Select
Run Code Online (Sandbox Code Playgroud)
这就是将单元格的数字位置转换为Range期望的格式,即A1格式.
如果您只想选择使用的范围,请使用
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)
您缺少一个右括号,即您没有关闭Range().
尝试这个 Range(cells(1, 1), cells(lastRow, lastColumn)).Select
但是你真的应该看看 Dick Kusleika 的另一个答案,寻找可能更好地为你服务的替代方案。具体来说,ActiveSheet.UsedRange.Select它与您的代码具有相同的最终结果。