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