ByRef参数types不匹配 – Excel VBA

下午,

我有一个函数来计算从一个date的星期几名称:

Function calcWeekdayName(calcDate As Date) As String Dim calcWeekday As Integer calcWeekday = Weekday(calcDate, vbMonday) calcWeekdayName = weekdayName(calcWeekday, True, vbMonday) End Function 

然后我使用公共variables来传递date到这个函数。 公式variables在工作表2中声明:

 Public searchDate As Date 

然后将variables设置在我的函数下面的sub:

 searchDate = Worksheets("Update Data").Range("B3").Value 

更新数据上的B3格式为dd / mm / yyyy

当我尝试使用函数和searchDatevariables设置variablesweekdayName时,我得到一个ByRef参数types不匹配。

在工作表2上:

  Public weekdayName As String 

在Sub:

  weekdayName = calcWeekdayName(searchDate) 

B3的当前价值是28/03/2016,但我也尝试了01/01/2016。

干杯

Sheet2是一个工作表对象 – 它的代码隐藏是一个类模块

类模块和“标准模块”是不同的,因为它们的Public成员需要一个实例才能访问。

所以你可以做Sheet2.MyPublicVariable = 42 ,但是你不能只做MyPublicVariable = 42 除非你在声明这个variables的模块中

通过在模块的顶部指定Option Explicit可以防止您的问题; 那么, searchDate将无法访问,因此未声明,VBA代码将拒绝编译。

通过指定Option Explicit ,你允许使用未声明的variables ,这是VBA中所有邪恶的根源。

使用。 选项。 明确。

您有WeekDayNamevariables的问题。 您应该将其重命名为myWeekDayName,以避免与同名的VBA函数混淆。

 Public searchDate As Date Public myWeekDayName As String Function calcWeekdayName(calcDate As Date) As String Dim calcWeekday As Integer calcWeekday = Weekday(calcDate, vbMonday) calcWeekdayName = VBA.weekdayName(calcWeekday, True, vbMonday) End Function Sub test() searchDate = Worksheets("Sheet1").Range("B3").Value myWeekDayName = calcWeekdayName(searchDate) End Sub