获取Excel VBA中的当前单元格

时间:2010-02-04 18:18:39

标签: excel vba excel-vba

我在Excel / VB中有一个小脚本,我正在努力工作。我想要做的就是选择要复制的动态数据范围,但我似乎无法找到有关如何获取网格数据的任何帮助/代码(如A11)。

以下是我从宏录制中选择数据范围的代码:

Range("D291:D380").Select

我希望我能做Range(Current).Select或其他什么,但那不起作用。

感谢任何帮助。

6 个答案:

答案 0 :(得分:25)

你试过了吗?

对于一个单元格:

ActiveCell.Select

对于多个选定的单元格:

Selection.Range

例如:

Dim rng As Range
Set rng = Range(Selection.Address)

答案 1 :(得分:2)

如果您尝试使用动态生成的字符串来获取范围,那么您只需构建如下字符串:

Range(firstcol & firstrow & ":" & secondcol & secondrow).Select

答案 2 :(得分:2)

这可能无法直接回答您的问题,但在尝试使用可能有助于您的动态范围时,我发现这些内容非常有用。

假设在工作表中,单元格A1:C3中的数字为100到108:

          A    B    C  
1        100  101  102
2        103  104  105
3        106  107  108

然后选择所有单元格,您可以使用CurrentRegion属性:

Sub SelectRange()
Dim dynamicRange As Range

Set dynamicRange = Range("A1").CurrentRegion

End Sub

这样做的好处是,如果向数字块添加新行或列(例如109,110,111),则CurrentRegion将始终引用放大的范围(在本例中为A1:C4)。

我在VBA代码中使用了CurrentRegion,发现在使用dynmacially范围时最有用。此外,它还避免了代码中的硬编码范围。

最后一点,在我的代码中,您将看到我使用A1作为CurrentRegion的参考单元格。无论您引用哪个单元格,它也都可以工作(例如:尝试用B2替换A1)。原因是CurrentRegion将根据参考单元格选择所有连续的单元格。

答案 3 :(得分:2)

关键字“选择”已经是vba Range对象,因此您可以直接使用它,而不必选择要复制的单元格,例如,您可以在Sheet1上发布这些命令:

ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste

如果是多重选择,则应在for循环中使用Area对象:

Dim a as Range
For Each a in ActiveSheet.Selection.Areas
    a.Copy
    ThisWorkbook.worksheets("sheet2").Range("A1").Paste
Next

此致

托马斯

答案 4 :(得分:1)

试试这个

Dim app As Excel.Application = Nothing
Dim Active_Cell As Excel.Range = Nothing

Try
            app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application)
 Active_Cell = app.ActiveCell

Catch ex As Exception
            MsgBox(ex.Message)
            Exit Sub
        End Try

'             .address will return the cell reference :)

答案 5 :(得分:0)

我意识到这并不直接适用于问题的标题,但是处理变量范围的一些方法可能是每次代码运行时选择范围 - 特别是如果您对用户选择感兴趣范围。如果 对该选项感兴趣,则可以使用Application.InputBox(官方文档页面here)。其中一个可选变量是'type'。如果类型设置为8,则InputBox还具有excel样式范围选择选项。如何在代码中使用它的一个例子是:

Dim rng as Range
Set rng = Application.InputBox(Prompt:= "Please select a range", Type:=8)

注意:

如果将InputBox值分配给非范围变量(不带Set关键字),而不是范围,将分配范围中的值,如下面的代码所示(尽管选择多个范围)在这种情况下可能需要将值分配给变量):

Dim str as String
str = Application.InputBox(Prompt:= "Please select a range", Type:=8)