Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Access VBA:获取错误';13';:从其他窗体调用函数时类型不匹配_Vba_Ms Access 2013_Type Mismatch - Fatal编程技术网

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

MS Access VBA:获取错误';13';:从其他窗体调用函数时类型不匹配,vba,ms-access-2013,type-mismatch,Vba,Ms Access 2013,Type Mismatch,编辑:问题已经解决了。请在下面的单独帖子中查看我的答案 我有两种表格:日历和日历。单击日历中的文本框时,它将打开frmMagnet,并应调用frmMagnet中声明的函数。但是当我点击文本框时,我得到了错误13 全局变量 Private CalendarArray(42, 2) As Variant 压延机阵列初始化 Private Sub InitVariables() intMonthSelect = Month(CDate(CStr(Me.MonthComboBox) & "

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

我有两种表格:日历和日历。单击日历中的文本框时,它将打开frmMagnet,并应调用frmMagnet中声明的函数。但是当我点击文本框时,我得到了错误13

全局变量

Private CalendarArray(42, 2) As Variant
压延机阵列初始化

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很长,是否所有字段都正确标记,没有任何字符串(也没有空值)

我的建议是在程序开始时设置一个断点(进入VBA并单击左侧的栏以获得一个红点)。然后按下按钮运行该过程,并一步一步地进行,直到找到不符合要求的行(使用F8一步一步地进行)

最后,打开option explicit并正确声明所有变量是值得的,它在这种情况下也有很大帮助。

所以我的问题是

Me.Controls(HeaderText) = CStr(theDate)
需要在HeaderText周围引用。正确的语法是

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

请包括
CalenderArray
方法实现。刚刚添加到帖子中。谢谢。您的VBA似乎都不是从窗体生成的事件。我没有看到
textbox\u单击
Form\u打开
子例程,我在上面的代码中没有看到函数。考虑在FMOMMONE ONOPEN事件中调用<代码> PopulateHeaderText <代码>子程序。我用一个双击函数更新代码(它们都遵循相同的格式)。我没有基于OnOpen事件调用PopulateHeaderText,因为我需要传入日期。谢谢。你知道如何调试vba吗?如果是,哪一行导致错误这一行是违规者:呼叫表单(“frmMagnet”)。PopulateHeaderText(DayOfMonth)。在我的模块的顶部,或者无论它叫什么,我都有显式的选项。我只包含了我认为相关的部分代码,因为我不想成为那种把整件事都扔给你然后说“弄明白”的人。但是,如果你或其他人认为拥有这一切会有所帮助,我可以发布。呵呵,我明白了,把精选的部分放在顶部,剩下的部分放在下面作为参考也许是一个好主意——这将帮助我更快地查看并弄清楚,我想!很高兴你把它整理好了!!