Excel 为什么子例程的第一个参数必须通过VAL传递
我有以下代码:Excel 为什么子例程的第一个参数必须通过VAL传递,excel,vba,Excel,Vba,我有以下代码: Sub AddValidation() Dim ws, wsDefinitions As Worksheet Set ws = ThisWorkbook.Worksheets("TData") Set wsDefinitions = ThisWorkbook.Worksheets("Definitions") Call AddValidator(ws, wsDefinitions, "FaultType", FaultTypeColumn) End Su
Sub AddValidation()
Dim ws, wsDefinitions As Worksheet
Set ws = ThisWorkbook.Worksheets("TData")
Set wsDefinitions = ThisWorkbook.Worksheets("Definitions")
Call AddValidator(ws, wsDefinitions, "FaultType", FaultTypeColumn)
End Sub
及
在编译过程中,我得到AddValidator-ws的第一个参数的ByRef参数类型missmatch。
将ByVal添加到定义中时:
Sub AddValidator(ByVal targetWs As Worksheet, definitionsWs As Worksheet, definitionTableName As String, targetColumnNumber)
一切都很好。AddValidator宏的两个第一个参数是工作表类型,但只需要通过值传递第一个参数
有人能告诉我为什么吗?问题在于变量的声明
Dim ws, wsDefinitions As Worksheet
在这里,ws被声明为variant而不是sheet对象,因此Excel会提示您更新参数。如果您解决了这个问题,那么Excel不会引发错误。以下子系统将正常工作
Sub Test()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
mySub ws1, ws2
End Sub
Sub mySub(targetWS As Worksheet, sourceWS As Worksheet)
MsgBox targetWS.Name
MsgBox sourceWS.Name
End Sub
尝试声明这两种变量类型:Dim ws作为工作表,wsDefinitions作为工作表。非常感谢。这就是答案。我认为Dim var1、var2作为工作表将两个变量都声明为工作表,但显然不是。我的过错和误解。
Sub Test()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")
mySub ws1, ws2
End Sub
Sub mySub(targetWS As Worksheet, sourceWS As Worksheet)
MsgBox targetWS.Name
MsgBox sourceWS.Name
End Sub