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)