MS Access VBA:出现错误“13”:从不同的表单调用函数时类型不匹配
MS Access VBA: Getting Error '13': Type Mismatch when calling a function from a different form
编辑:问题已解决。请在下面单独 post 中查看我的回答!
我有两种形式:Calendar 和 frmMagnet。单击 Calendar 中的文本框时,它会打开 frmMagnet 并且应该调用 frmMagnet 中声明的函数。但是当我点击文本框时,出现错误 13。
全局变量
Private CalendarArray(42, 2) As Variant
CalenderArray初始化
Private Sub InitVariables()
intMonthSelect = Month(CDate(CStr(Me.MonthComboBox) & " 1"))
intYearSelect = Me.YearComboBox
lngDate = CLng(DateSerial(intYearSelect, intMonthSelect, 1))
strUnscheduledJobs = ""
'Initialize CalendarArray
Dim i As Integer
For i = 0 To UBound(CalendarArray) - 1
CalendarArray(i, 0) = lngDate - Weekday(lngDate) + 1 + i
CalendarArray(i, 1) = CStr(Day(CalendarArray(i, 0)))
Next i
End Sub
万年历方法打开磁铁表格
Private Sub text1_DblClick(Cancel As Integer)
If Len(Me.ActiveControl.Text) > 2 Then
Call OpenTextBox(Me.ActiveControl.Name)
End If
End Sub
Private Sub OpenTextBox(ctlName As String)
Dim ctlValue As Integer
Dim DayOfMonth As Long
ctlValue = Me.Controls(ctlName).Tag
DayOfMonth = CalendarArray(ctlValue - 1, 0)
DoCmd.OpenForm "frmMagnet"
Call Forms("frmMagnet").PopulateHeaderText(DayOfMonth) 'THE ERROR IS ON THIS LINE!!!!!
End Sub
frmMagnet 方法
Public Sub PopulateHeaderText(theDate As Long)
Me.Controls(HeaderText) = CStr(theDate)
End Sub
谢谢!
在您打开磁铁表单的方法中,您有这行代码;
ctlValue = Me.Controls(ctlName).Tag
ctlValue 是 Long,是否所有字段都正确标记且没有任何字符串字符(并且没有空值)?
我的建议是在程序开始时设置一个断点(进入 VBA 并单击左侧栏以获得红点)。然后按您的按钮 运行 程序,逐步执行直到找到有问题的行(使用 F8 逐步执行)。
最后,值得打开选项显式并正确声明所有变量,它在这种情况下也有很大帮助。
所以我的问题是
Me.Controls(HeaderText) = CStr(theDate)
需要围绕 HeaderText 引用。正确的语法是
Me.Controls("HeaderText") = CStr(theDate)
编辑:问题已解决。请在下面单独 post 中查看我的回答!
我有两种形式:Calendar 和 frmMagnet。单击 Calendar 中的文本框时,它会打开 frmMagnet 并且应该调用 frmMagnet 中声明的函数。但是当我点击文本框时,出现错误 13。
全局变量
Private CalendarArray(42, 2) As Variant
CalenderArray初始化
Private Sub InitVariables()
intMonthSelect = Month(CDate(CStr(Me.MonthComboBox) & " 1"))
intYearSelect = Me.YearComboBox
lngDate = CLng(DateSerial(intYearSelect, intMonthSelect, 1))
strUnscheduledJobs = ""
'Initialize CalendarArray
Dim i As Integer
For i = 0 To UBound(CalendarArray) - 1
CalendarArray(i, 0) = lngDate - Weekday(lngDate) + 1 + i
CalendarArray(i, 1) = CStr(Day(CalendarArray(i, 0)))
Next i
End Sub
万年历方法打开磁铁表格
Private Sub text1_DblClick(Cancel As Integer)
If Len(Me.ActiveControl.Text) > 2 Then
Call OpenTextBox(Me.ActiveControl.Name)
End If
End Sub
Private Sub OpenTextBox(ctlName As String)
Dim ctlValue As Integer
Dim DayOfMonth As Long
ctlValue = Me.Controls(ctlName).Tag
DayOfMonth = CalendarArray(ctlValue - 1, 0)
DoCmd.OpenForm "frmMagnet"
Call Forms("frmMagnet").PopulateHeaderText(DayOfMonth) 'THE ERROR IS ON THIS LINE!!!!!
End Sub
frmMagnet 方法
Public Sub PopulateHeaderText(theDate As Long)
Me.Controls(HeaderText) = CStr(theDate)
End Sub
谢谢!
在您打开磁铁表单的方法中,您有这行代码;
ctlValue = Me.Controls(ctlName).Tag
ctlValue 是 Long,是否所有字段都正确标记且没有任何字符串字符(并且没有空值)?
我的建议是在程序开始时设置一个断点(进入 VBA 并单击左侧栏以获得红点)。然后按您的按钮 运行 程序,逐步执行直到找到有问题的行(使用 F8 逐步执行)。
最后,值得打开选项显式并正确声明所有变量,它在这种情况下也有很大帮助。
所以我的问题是
Me.Controls(HeaderText) = CStr(theDate)
需要围绕 HeaderText 引用。正确的语法是
Me.Controls("HeaderText") = CStr(theDate)