从VBA中的函数中选择单元格

时间:2015-05-22 13:29:28

标签: excel vba excel-vba

我想要一个首先激活特定工作表然后选择特定单元格的宏。但是,当我运行下面的代码时,我得到以下消息:“运行时错误:'1004':选择Range类的方法失败”。我做错了什么?

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

6 个答案:

答案 0 :(得分:3)

Range("A1")适用于当前有效工作表上的特定单元格。您的错误是因为当您在另一个工作表上定义范围(即进行函数调用)时,您试图在 活动的任何工作表上选择一个单元格。

这对你有用:

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,仅维护callingFunction以实现向后兼容性

同样,除非您的代码比此示例更多,否则sub callingFunction() Sheets("Data").Range("A1").select Sheets("Picklist").Range("A1").select end sub 可以重写为:

{{1}}

并且效率更高

答案 1 :(得分:3)

myCell参数是一个范围引用,存在于其他一些工作表中。尝试传入您想要选择的单元格地址的字符串值,如下所示:

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定义为函数是否有某种原因 - 它会向调用代码返回一些值吗?如果没有,您可以将其定义为过程。

答案 2 :(得分:1)

在Sub中,您正在为ActiveSheet定义范围。因此,如果您选择其他工作表并尝试选择范围,则它无法正常工作 要解决此问题,请正确定义范围:

Sub callingFunction()

    Call selectingCells("Data", ThisWorkbook.Sheets("Data").Range("A1"))
    Call selectingCells("Picklist", ThisWorkbook.Sheets("Picklist").Range("A1"))

End Sub

答案 3 :(得分:1)

因为您没有对您的范围对象进行限定,所以您的功能就像这样:

Call selectingCells("Data", Activesheet.Range("A1"))
Call selectingCells("Picklist", Activesheet.Range("A1"))

如果您不在表格中,并且与您尝试选择的范围相同,则会收到您正在获取的错误。如果您愿意,可以将功能更改为一个参数,因为工作表信息包含在其中。像这样:

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

答案 4 :(得分:0)

尝试:

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

答案 5 :(得分:0)

为什么你将函数用于这么简单的任务?

使用此方法

Sub test()
    Sheets("Data").[A1].Select
    Sheets("Picklist").[A1].Select
End sub