跨窗体调用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
相关产品推荐
相关产品推荐

