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

关闭含VBA的Excel客户端工作簿后,其代码在其他工作簿中触发执行的问题求助

关闭含VBA的Excel客户端工作簿后,其代码在其他工作簿中触发执行的问题求助

我自己做了一个替代简易CRM的Excel工作簿,里面写了VBA代码,用来管理库存、零件清单、图纸索引和服务记录。它作为客户端和内部服务器上的多个数据库交互,支持多人同时使用。

代码分散在客户端工作簿的4个模块里:

  • 工作簿打开时会自动运行一个生成首页的例程,同时检查更新和权限
  • 还有一个监听回车键的例程,按下回车就能触发搜索

目前这些功能都正常,除了一些日常的bug和新增需求要处理。但最近遇到一个诡异的问题:

  1. 打开这个客户端工作簿
  2. 再打开另一个普通工作簿
  3. 关闭客户端工作簿
  4. 在普通工作簿里按回车

这时候客户端的首页居然会出现在普通工作簿里(而且首页有清页功能,会把原有内容清空,还没法用撤销恢复),同时客户端工作簿还会自动重新打开。看起来关闭客户端后,Excel还在“幽灵”模式下运行它的代码。

而且只有在客户端已经关闭的情况下才会出现这个问题,如果客户端还开着就不会。关闭客户端后去VBA编辑器里看,也看不到任何可运行的代码了。另外如果把所有工作簿都关掉再重新打开一个,也不会出现这个问题。

有没有人遇到过这种情况?或者知道怎么阻止Excel执行已关闭工作簿里的代码?

因为问题被要求提供代码,我这里把我觉得可能是罪魁祸首的部分贴出来:

ThisWorkbook中的代码:

Private Sub workbook_Open()
    Call homePageGen
End Sub

Sheet1中的代码:

Private Sub Worksheet_Change(ByVal target As Range)
    Application.OnKey "{ENTER}", "checkEnter"
    Application.OnKey "{RETURN}", "checkEnter"
End Sub

checkEnter例程:

Public Sub checkEnter()
    Set A = ActiveWorkbook
    Set x = A.ActiveSheet
    
    If x.Cells(7, 5).Value <> "" And x.Cells(1, 6).Value = "Find A Drawing" Then
        Call filterPlant
    End If
    
    If x.Cells(7, 11).Value <> "" And x.Cells(1, 6).Value = "Find A Drawing" Then
        Call findDrawing
    End If
    
    If ActiveCell.row = 7 And x.Cells(3, 2).Value = "searchPartsPage" Then
        Call searchParts
    End If
    
    activeRow = ActiveCell.row
    activeColumn = ActiveCell.column
    x.Cells(activeRow + 1, activeColumn).Select
End Sub

homePageGen例程:

Public Sub homePageGen()
    Application.ScreenUpdating = False
    Dim A As Workbook
    Dim x As Worksheet
    
    Set A = ActiveWorkbook
    Set x = ActiveSheet
    
    Call clrPg(x)
    
    If checkVersion = False Then
        Application.ScreenUpdating = True
        MsgBox ("This is not the most recent version of this application please use the updated version found in the Internal Software folder, in the Public drive")
        Exit Sub
    End If
    
    Call crtBtn(x, x.Range("B3", "C5"), "findPageGen", "Find A Drawing")
    Call crtBtn(x, x.Range("E3", "F5"), "addDrawing", "Add A Drawing")
    Call crtBtn(x, x.Range("B8", "C10"), "homePageGenPart", "Part Index")
    Call crtBtn(x, x.Range("E8", "F10"), "viewAllChangeNotes", "Change Note Index")
    Call crtBtn(x, x.Range("H3", "I5"), "viewSentFilePacks", "Sent File Packs")
    Call crtBtn(x, x.Range("H8", "I10"), "homePageJob", "Job Records")
    Call crtBtn(x, x.Range("B13", "C15"), "serviceRecordPageGen", "Service Records")
    
    Application.ScreenUpdating = True
End Sub

注:checkVersion例程如果检测到版本过时,会自动运行更新程序。


备注:内容来源于stack exchange,提问作者Robert Morris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:14:32