【发布时间】:2020-05-12 10:43:56
【问题描述】:
我有以下代码:
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
和
Sub AddValidator(targetWs As Worksheet, definitionsWs As Worksheet, definitionTableName As String, targetColumnNumber)
Dim definitionsRange As Range, targetRange As Range
Set definitionsRange = definitionsWs.ListObjects(definitionTableName).ListColumns(1).DataBodyRange
Set targetRange = targetWs.ListObjects("Table1").ListColumns(targetColumnNumber).DataBodyRange
With targetRange.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & definitionsWs.Name & "'!" & definitionsRange.Address
End With
End Sub
在编译期间,AddValidator 的第一个参数“ws”得到“ByRef 参数类型不匹配”。 当我将 ByVal 添加到定义中时:
Sub AddValidator(ByVal targetWs As Worksheet, definitionsWs As Worksheet, definitionTableName As String, targetColumnNumber)
一切编译正常。 “AddValidator”宏的两个第一个参数是工作表类型,但只有第一个需要通过值传递。
谁能告诉我为什么?
【问题讨论】:
-
尝试声明两种变量类型:
Dim ws As Worksheet, wsDefinitions As Worksheet.