ByRef参数类型不匹配 - Excel VBA

时间:2016-03-29 17:45:39

标签: excel vba excel-vba

下午,

我有一个从日期计算工作日名称的功能:

Function calcWeekdayName(calcDate As Date) As String

Dim calcWeekday As Integer
calcWeekday = Weekday(calcDate, vbMonday)

calcWeekdayName = weekdayName(calcWeekday, True, vbMonday)

End Function

然后我使用Public变量将日期传递给此函数。 Public变量在Sheet 2上声明:

Public searchDate As Date

然后在我的函数下面的子项中设置变量:

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

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

当我尝试使用函数和searchDate变量设置变量weekdayName时,我得到一个ByRef参数类型不匹配。

在表2中:

 Public weekdayName As String

在Sub:

 weekdayName = calcWeekdayName(searchDate)

B3的当前价值是2016年3月28日,但我也尝试过01/01/2016。

干杯

2 个答案:

答案 0 :(得分:4)

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

类模块和“标准模块”的不同之处在于,Public成员需要实例才能访问。

所以你可以做Sheet2.MyPublicVariable = 42,但你不能只做MyPublicVariable = 42 ,除非你在同一模块中宣布该变量

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

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

使用。选项。明确的。

答案 1 :(得分:0)

WeekDayName变量存在问题。您应该将其重命名为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