问:无论何时加载我的插件,Excel都会抛出以下错误(运行时错误49,错误的DLL调用约定)

尽管绝对没有外部DLL引用,但每次都会弹出对话框,但没有指出错误的位置.
要么
问:每次保存特定代码行时Excel都会崩溃.
怎么解决这个问题?
Ani*_*han 14
由于编译器错误,可能会发生此错误.对此最简单的解决方案是进行小的代码更改并重新编译.我通常做的是,
1 - >将Private Enum类型添加到插件中任何模块的顶部
Private Enum Something
member = 1
End Enum
Run Code Online (Sandbox Code Playgroud)
2 - > 编译插件
3 - >重启excel
4 - >删除所做的代码更改.它不再是必要的.
即使此错误引用外部(DLL)函数调用,也可以通过VBA定义的函数或子例程的参数或返回值类型不匹配来触发.此外,当由这些原因触发时,调试器有时会将错误点显示为不同的函数调用,通常在调用堆栈中更高,包括在创建问题情况之前一直工作且稳定的调用.通常,问题是由固定类型参数参数或返回值与Variant之间的未匹配触发,反之亦然.
示例:Variant-valued函数在运行时返回一个Long值,该值分配给Integer变量.
决议:
应用于该方法不可用的错误对象变体的对象方法(如AutoFit)(例如,AutoFit应用于既不是整行也不是整个列范围的范围).与上述场景类似,错误可能在问题语句存在的例程的返回点处抛出,而不是在语句本身处抛出.
解决方案:从修复语法问题开始.不幸的是,有效的修复程序有时会继续抛出错误,直到重置VBE编辑器.我没有推断出解决该问题的最小步骤,但这样的事情通常有效:
如果对外部库函数的调用被识别为罪魁祸首,请参阅Microsoft关于错误的文档:
错误的DLL调用约定
*传递给动态链接库(DLL)的参数必须与例程所期望的完全匹配.调用约定处理参数的数量,类型和顺序.您的程序可能正在调用DLL中的例程,该例程正在传递错误类型或数量的参数.
要更正此错误,请确保所有参数类型与您正在调用的例程声明中指定的参数类型一致.
确保传递的是您正在调用的例程声明中指示的相同数量的参数.
如果DLL例程需要按值进行参数,请确保在例程的声明中为这些参数指定了ByVal.
返回参数:在讨论过程参数时可以轻易忽略的一点是返回参数.确保它的类型正确,或者不丢失.Excel/VBA用户习惯于如果省略函数的返回类型,系统会隐式地将返回类型设置为Variant,并且它可以处理任何返回的数据.外部声明的功能不是这样!! 返回类型必须在DECLARE语句中声明.*
已损坏的库引用:检查模块代码的库引用是否有效.在VBA IDE中,选择 Tools => References以查看引用库的列表,并确保没有任何选中的项标记为" Missing ".如果是这样,请修复它们.