You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨窗体调用Sub过程时出现Error 2465错误求助

解决Access跨窗体用Form变量调用Sub时的Error 2465问题

听起来你遇到的是Access里通用Form类型变量无法识别自定义过程的典型问题,Error 2465就是因为系统找不到你要调用的SetDadosParametroCadastro过程。让我给你拆解下原因和解决办法:

问题根源

当你把变量声明为Form这种通用类型时,Access只会把它当作基础窗体对象处理,不会识别目标窗体(这里是Cadastro_Aluno)里自定义的Sub过程。所以直接用formCaller.SetDadosParametroCadastro就会触发对象定义错误——因为通用Form对象根本没有这个自定义方法。

两种可行解决方案

方案1:声明为具体窗体类型

把变量的类型从通用Form改成目标窗体的具体类名,这样Access就能直接识别它的自定义过程了:

Dim formCaller As Cadastro_Aluno ' 用目标窗体的类名,不是字符串
Set formCaller = Application.Forms("Cadastro_Aluno")
If Not formCaller Is Nothing Then
    formCaller.SetDadosParametroCadastro Me.txtKey.Value
End If

⚠️ 注意:如果目标窗体还没打开,Application.Forms("Cadastro_Aluno")会返回Nothing,所以要确保窗体处于打开状态,或者先打开它再赋值。

方案2:用CallByName动态调用(适合通用场景)

如果因为某些原因必须保留通用Form类型变量,可以用CallByName函数动态调用自定义过程,它能根据字符串名称定位到目标方法:

Dim formCaller As Form
Set formCaller = Application.Forms("Cadastro_Aluno")
If Not formCaller Is Nothing Then
    ' 语法:CallByName(对象, 过程名, 调用类型, 参数列表)
    CallByName formCaller, "SetDadosParametroCadastro", vbMethod, Me.txtKey.Value
End If

这里vbMethod表示调用的是Sub/Function过程,后面跟着你要传递的参数即可。

额外注意点

  • 确保目标窗体的SetDadosParametroCadastro过程是Public的,如果是Private权限,即使是具体类型变量也无法调用。
  • 检查Me.txtKey.Value的类型是否和目标过程的参数类型匹配,类型不匹配也可能触发类似错误。

内容的提问来源于stack exchange,提问作者tdmsoares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:26:12