2012-08-30 185 views
8

我想选择Excel工作表的格式化范围。 要定义的最后和第一行我使用下列功能:VBA:按变量选择范围

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 

然而,这是不工作。也许有人知道它有什么问题。非常感谢!

+0

什么不工作?我尝试用随机数据填充范围B2到D4,代码选择A1到D4。这不是你所期望的吗? – ssarabando

回答

6

如果你只是想选择的使用范围,使用

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 
3

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

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

但是,你真的应该看看从迪克Kusleika其他答案可能更好地为你可能的选择。具体而言,ActiveSheet.UsedRange.Select与您的代码具有相同的最终结果。

22

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

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

继承人什么,我想:如果选择范围是在引号,VBA真正想要的字符串,并解释细胞出来因此,尝试以下内容:

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

它的工作:) ie ..只是用你的变量创建一个字符串,请务必标注它作为一个字符串变量和Excel将读取正确的关闭它;)

继测试,发现工作:

Sub Macro04() 

Dim Copyrange As String 

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

你把它们变成一个地址,但将细胞(#,#)使用,以便只使用lastRow = ActiveSheet.UsedRange.Rows.countlastColumn = ActiveSheet.UsedRange.Columns.Count

1

我尝试使用整数输入不地址输入:

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

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

什么做的工作是使用以下命令:

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

其实firstColumn应该是lastRow ==> Range(Chr(64 + firstColumn)&firstRow&“:”&Chr(64 + lastColumn)&lastRow).Selec –

7

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

该做的工作,但:

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

这花了转化细胞的数值位置,以什么范围的预期,这是A1幅面的照顾。

+0

谢谢,我花了整整一个早上试图弄清楚如何修复这是一个语法问题。 :) – Michelle

+0

谢谢你救了我的一天! –