MS Access VBA:获取错误' 13':从其他表单调用函数时类型不匹配

时间:2015-04-09 15:27:31

标签: vba ms-access-2013 type-mismatch

编辑:问题已经解决。请在下面的单独帖子中查看我的回答!

我有两种形式:Calendar和frmMagnet。单击日历中的文本框时,它会打开frmMagnet并且应该调用frmMagnet中声明的函数。但是当我点击文本框时,我收到错误13。

Global Vars

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

谢谢!

2 个答案:

答案 0 :(得分:1)

在打开磁铁表格的方法上,你有这行代码;

 ctlValue = Me.Controls(ctlName).Tag

ctlValue为Long,是否所有字段都正确标记,没有任何字符串字符(并且没有空值)?

我的建议是,在程序开始时设置一个断点(进入VBA并点击左边的栏中得到一个红点)。然后按下按钮运行程序,并逐步完成,直到找到有问题的行(使用F8逐步进行)。

最后,值得明确选项并正确声明所有变量,这在这种情况下也会有很大帮助。

答案 1 :(得分:1)

所以我的问题是

Me.Controls(HeaderText) = CStr(theDate)

HeaderText周围需要引用。正确的语法是

Me.Controls("HeaderText") = CStr(theDate)