我想要一个首先激活特定工作表然后选择特定单元格的宏。但是,当我运行下面的代码时,我得到以下消息:“运行时错误:'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
答案 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