从VBA中的函数中select单元格
我想有一个macros,首先激活一个特定的工作表,然后select一个特定的单元格。 但是,当我运行下面的代码时,我得到以下消息:“运行时错误:'1004':select范围类失败的方法”。 我究竟做错了什么?
Function selectingCells(myWs As String, myCell As Range) Sheets(myWs).Activate myCell.Select End Function Sub callingFunction() Call selectingCells("Data", Range("A1")) Call selectingCells("Picklist", Range("A1")) End Sub
Range("A1")
适用于当前活动工作表上的特定单元格。 你的错误是因为当你在不同的工作表中定义范围(即进行函数调用)时,你正在试图select任何表单上的单元格。
这将为你工作:
Function selectingCells(myWs As String, myCell As String) Sheets(myWs).Activate Range(myCell).Select End Function Sub callingFunction() Call selectingCells("Data", "A1") Call selectingCells("Picklist", "A1") End Sub
几个注意事项:
- 除非这是一个可重现的小代码,否则不需要
selectingCells
作为Function
因为它不返回任何内容。 把它做成一个Sub
你会更好 - 在
Call
callingFunction
不需要Call
。Call
已被弃用,只有维持向后兼容
同样,除非你的代码比这个例子更多, callingFunction
可以被重写为:
sub callingFunction() Sheets("Data").Range("A1").select Sheets("Picklist").Range("A1").select end sub
并更有效率
myCell参数是其他工作表上存在的范围引用。 尝试传入您想要select的单元格地址的string值,如下所示:
Function selectingCells(myWs As String, myCell As String) Sheets(myWs).Activate Sheets(myWs).Range(myCell).Select End Function Sub callingFunction() Call selectingCells("Data", "A1") Call selectingCells("Picklist", "A1") End Sub
是否有某种原因为什么selectingCells
被定义为一个函数 – 它会返回一些值的调用代码? 如果没有,您可以将其定义为一个过程。
在Sub中,您正在为ActiveSheet定义范围。 所以,如果您select其他工作表并尝试select范围,它不起作用。
要更正此问题,请正确定义范围:
Sub callingFunction() Call selectingCells("Data", ThisWorkbook.Sheets("Data").Range("A1")) Call selectingCells("Picklist", ThisWorkbook.Sheets("Picklist").Range("A1")) End Sub
因为你不符合你的范围对象你的function是这样的:
Call selectingCells("Data", Activesheet.Range("A1")) Call selectingCells("Picklist", Activesheet.Range("A1"))
如果您不在与您想要select的范围相同的工作表上,则会得到您遇到的错误。 如果需要,可以将函数更改为一个参数,因为工作表信息包含在其中。 像这样的东西:
Function selectingCells(myCell As Range) myCell.parent.Activate myCell.Select End Function Sub callingFunction() Call selectingCells(sheets("Data").Range("A1")) Call selectingCells(sheets("Picklist").Range("A1")) End Sub
尝试:
Function selectingCells(myWs As String, myCell As Range) Set mysheet = Sheets(myWs) mysheet.Activate Set mySelectedCell = mysheet.Range(myCell.Address) mysheet.Activate mySelectedCell.Select End Function
为什么你使用这个简单的任务function?
使用这种方法
Sub test() Sheets("Data").[A1].Select Sheets("Picklist").[A1].Select End sub