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

如何解决VBA代码删除最后激活工作表(含图表工作表)时的类型不匹配错误?

解决删除图表工作表后VBA运行时错误'13':类型不匹配的问题

问题原因

你声明的LstSht是Worksheet类型,但通过Win+F11创建的图表工作表属于Chart对象,不属于Worksheet范畴。当切换离开图表工作表时,Workbook_SheetDeactivate事件会把Chart对象赋值给Worksheet类型的变量,触发类型不匹配;删除图表工作表后,调用GoToLast时,变量指向已失效的Chart对象,错误彻底爆发。

修复步骤

  1. 修改公共变量类型
    把模块中的Public LstSht As Worksheet改为:

    Public LstSht As Object
    

    Object类型可以兼容Worksheet和Chart两种对象,从根源避免类型不匹配问题。

  2. 增加对象有效性判断
    在GoToLast过程中添加判断逻辑,确保调用Activate时目标对象仍存在于工作簿中:

    Sub GoToLast()
        If Not LstSht Is Nothing Then
            Dim obj As Object
            Dim isExists As Boolean
            isExists = False
            
            ' 遍历所有工作表和图表,确认目标对象未被删除
            For Each obj In ThisWorkbook.Sheets
                If obj Is LstSht Then
                    isExists = True
                    Exit For
                End If
            Next obj
            
            If isExists Then
                LstSht.Activate
            Else
                MsgBox "目标工作表/图表已被删除"
            End If
        Else
            MsgBox "没有可返回的工作表/图表"
        End If
    End Sub
    
  3. (可选)优化SheetDeactivate事件
    可以在事件中增加类型过滤,只记录工作表或图表对象:

    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
        If TypeName(Sh) = "Worksheet" Or TypeName(Sh) = "Chart" Then
            Set LstSht = Sh
        End If
    End Sub
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:57:37