获取Excel VB中的当前单元格

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

这里是我从macroslogging中select数据范围的代码:

Range("D291:D380").Select 

我希望我可以做Range(Current).Select或者什么,但是这是行不通的。

任何帮助表示赞赏。

你有没有尝试过:

对于一个单元格:

 ActiveCell.Select 

对于多个选定单元格:

 Selection.Range 

例如:

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

这可能不会帮助你直接回答你的问题,但是当我尝试使用可能帮助你的dynamic范围时,我发现它是有用的。

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

  ABC 1 100 101 102 2 103 104 105 3 106 107 108 

然后select所有可以使用CurrentRegion属性的单元格:

 Sub SelectRange() Dim dynamicRange As Range Set dynamicRange = Range("A1").CurrentRegion End Sub 

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

我在我的VBA代码中使用了很多的CurrentRegion,并且发现它在使用大小合适的范围时是最有用的。 此外,它避免了代码中的硬编码范围。

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

关键字“ Selection ”已经是一个vba Range对象,因此您可以直接使用它,而不必select要复制的单元格,例如,您可以在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 

问候

托马斯

如果你想用dynamic生成的string来获取范围,那么你只需要像这样构buildstring:

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

尝试这个

 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 :)