我在Excel / VB中有一个小脚本,我正在努力工作。我想要做的就是选择要复制的动态数据范围,但我似乎无法找到有关如何获取网格数据的任何帮助/代码(如A11)。
以下是我从宏录制中选择数据范围的代码:
Range("D291:D380").Select
我希望我能做Range(Current).Select
或其他什么,但那不起作用。
感谢任何帮助。
答案 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)