HelloWorld_Hi6 2025-09-18 11:38 采纳率: 80%
浏览 7

VBA代码,Excel自动被关闭

Excel VBA,别人写的工具代码,我用vbe编辑器打开,在模块最上方用dim定义的模块级变量和public定义的全局变量,为什么我变更其名字时就会Excel自动关闭

还有一个现象:现在这个VBA工具,在定义模块级变量dim a as string的模框中的sub1()里面给a赋值,然后call sub2(a),传递了参数a,而在其他module里的sub2,它的定义是:sub2(a as string),当在sub1里给a赋值时所有Excel都会被自动关掉

其他sub里也同样方法给模块级变量a赋值,然后调用sub2(a),传递参数a,就没问题

  • 写回答

7条回答 默认 最新

  • 阿里嘎多学长 2025-09-18 11:38
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    VBA代码,Excel自动被关闭

    问题分析

    您在VBE编辑器中定义了模块级变量和全局变量,但每次变更它们的名称,就会导致Excel自动关闭。这可能是由于代码中存在未被释放的资源或变量引起的。

    问题解决方案

    请检查您的代码,看有无使用了 OpenCloseLockSave 等方法并没有对应的释放资源。特别是:

    • 在循环或函数中使用 OpenClose 等方法时,需要对应释放资源。
    • 如果使用了 LockUnlock 方法,需要在释放资源之前解锁。
    • 检查是否有未声明或未释放的变量,特别是对象变量。

    具体来说,我建议检查以下几个方面:

    • 检查循环中是否有未被释放的资源。
    • 检查是否有未被使用的公共变量或模块级变量。
    • 检查有是否有未正确关闭的对象,如数据库连接或文件操作。

    如果您有具体的代码,请提供给我,我可以帮助您找到问题。

    核心部分代码示例

    ' 错误的示范:未释放对象资源
     Dim objWorkbook As Workbook
     Set objWorkbook = ActiveWorkbook
     On Error Resume Next
     objWorkbook.Save
     On Error GoTo 0
    
    ' 正确的示范:释放资源
    Dim objWorkbook As Workbook
    Set objWorkbook = ActiveWorkbook
    On Error Resume Next
    objWorkbook.Save
    Set objWorkbook = Nothing
    On Error GoTo 0
    

    最后建议

    如果您仍然无法解决问题,请尝试以下步骤:

    • 创建一个完全空白的模块,尝试在该模块中进行变量的定义和修改,看是否仍然会导致Excel关闭。
    • 使用DEBUG选项卡查看VBA中的错误信息,了解错误的具体位置和原因。
    评论

报告相同问题?

问题事件

  • 创建了问题 9月18日