从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不需要CallCall已被弃用,只有维持向后兼容

同样,除非你的代码比这个例子更多, 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