Excel 如何将显式参数传递给范围对象?

Excel 如何将显式参数传递给范围对象?,excel,vba,Excel,Vba,我试图获取设置范围对象的第一行的单元格。同时避免使用激活,选择。该范围是动态的(在循环中更新为新行),因此使用Offset将不起作用 以下是我所拥有的: Set curr_ws = Worksheets("Data") Dim data_curr_rng As Range tool_sel = curr_ws.Range(data_curr_rng.Address(0, 0)).Offset(-4).Value 'Regardless of the column number of `data_

我试图获取设置范围对象的第一行的单元格。同时避免使用
激活
选择
。该范围是动态的(在循环中更新为新行),因此使用
Offset
将不起作用

以下是我所拥有的:

Set curr_ws = Worksheets("Data")
Dim data_curr_rng As Range
tool_sel = curr_ws.Range(data_curr_rng.Address(0, 0)).Offset(-4).Value
'Regardless of the column number of `data_curr_rng`, I need the cell in that column's Row 1

我一直在玩弄变量数据,但似乎无法找到正确的函数/属性来使用。

光标所在的位置有一个代码,ActiveCell, 可以将ActiveCell与Row和.End()结合使用

下面的代码返回向上的第一个单元格(Ctrl+UpArrow)


下面的代码

您可以使用
工作表的
单元格()
功能

my_row=1
我的_列=5
设置my_range=Application.ThisWorkbook.Sheets(1).Cells(my_行,my_列)
如果需要选择多个单元格的区域,可以像这样将其包装在
区域中

start\u行=1
开始列=5
结束_行=10
end_列=5
设置开始单元格=应用程序.ThisWorkbook.Sheets(1).Cells(开始行,开始列)
设置end\u cell=Application.ThisWorkbook.Sheets(1).Cells(end\u行,end\u列)
设置my_range=Application.ThisWorkbook.Sheets(1).range(开始单元格、结束单元格)
您的原始代码是:

您要求的是获取所选范围,标识完整列,然后获取第一个单元格(即第1行)


entireclumn
方法返回一个范围,然后在我上面的示例中,我只取该范围内的第一个单元格。

当前单元格(1,ActiveCell.column)
这是否需要事先使用
激活
选择
?我没有在我的脚本中使用那些方法,你提到的是“光标所在的位置”。啊,你说得对。我应该说“范围在哪里”。如果您的参考范围是
data\u curr\rng
,请用它代替
activecell
。一点也不麻烦,我明白您的意思。我想我只是指出OP并不是在寻找硬编码的列号。标题不是最好的。我完全同意避免使用
ActiveCell
ActiveSheet
。在发布评论时,我们是否考虑了光标位置/
ActiveCell
存在一些混淆。最后一行的非限定
Range
调用隐含地指的是
ActiveSheet
。这意味着如果
工作表(1)
start\u cell
end\u cell
的父工作表)未激活,则出现错误1004。您想声明一个
工作表
变量,并使用它限定从该工作表读取的所有范围。不,我没有测试它。如果读错了,就错了。根据您是在标准模块(
[[u Global].Range
)中还是在某个工作表的代码隐藏(
Me.Range
)中,不合格的
Range
的工作方式有所不同,是,在这种特定的情况下,这些
单元格
来自任何一张表,这是避免不合格的
范围
调用的更好理由。我的观点是,以某种方式编写的代码应该做同样的事情,并且无论它是在哪里编写的,都应该以相同的方式工作。“Hey look it works!”很好,直到有人复制代码并在另一个上下文中使用它,然后它爆炸了。将完全相同的代码放在
Sheet2
的代码后面,就有了它。
   ActiveCell.End(xlUp)
Set curr_ws = Worksheets("Data")
Dim data_curr_rng As Range
tool_sel = curr_ws.Range(data_curr_rng.Address(0, 0)).Offset(-4).Value
'Regardless of the column number of `data_curr_rng`, I need the cell in that column's Row 1
Set curr_ws = Worksheets("Data")
Dim data_curr_rng As Range
Set data_curr_rng = [Something] ` your example does not note how you set this.
' *** The solution to your question is below
Dim firstCellInColumn as Range ` could be cell etc. - using this to illustrate the concept
Set firstCellInColumn = data_curr_rang.EntireColumn.Cells(1,1)
' *** The back to your code
tool_sel = firstCellInColumn.Value