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

VBA删除重复查询及连接时遭遇‘Assignment to constant not permitted’错误的排查与解决

解决VBA删除特定查询/连接时的"Assignment to constant not permitted"错误

我之前写过一个宏用来关闭特定连接的「全部刷新」功能,运行完全正常,但把类似的逻辑套用在删除查询和连接操作上时,却触发了Assignment to constant not permitted错误,下面给大家拆解问题和解决方案:

出现错误的代码

这是我一开始写的有问题的代码,试图通过赋值的方式执行删除操作:

Sub DeleteConnections()
    Dim cn As WorkbookConnection
    Dim qr As WorkbookQuery
    For Each cn In ActiveWorkbook.Connections
        cn.Delete = CBool(cn.Name Like "BPTable(*" Or cn.Name Like "BPResourceChart(*" Or cn.Name Like "BPFlowSteps(*" _
        Or cn.Name Like "BPDayChart(*" Or cn.Name Like "BPResource(*" Or cn.Name Like "BPTable2(*" _
        Or cn.Name Like "BPHistoric(*" Or cn.Name Like "BPHistoryHours(*")
    Next
    For Each qr In ActiveWorkbook.Queries
        qr.Delete = CBool(qr.Name Like "BPTable(*" Or qr.Name Like "BPResourceChart(*" Or qr.Name Like "BPFlowSteps(*" _
        Or qr.Name Like "BPDayChart(*" Or qr.Name Like "BPResource(*" Or qr.Name Like "BPTable2(*" _
        Or qr.Name Like "BPHistoric(*" Or qr.Name Like "BPHistoryHours(*")
    Next
End Sub

参考的正常运行宏

之前用来关闭特定连接「全部刷新」功能的宏是这样的,当时逻辑没问题是因为操作的是属性:

Sub RefreshAllBlock()
    Dim conn As Object
    For Each conn In ActiveWorkbook.Connections
        conn.RefreshWithRefreshAll = Not CBool(conn.Name Like "*BP*" Or conn.Name Like "*ProductionSupportTickets*")
    Next
End Sub

错误原因分析

问题出在对VBA对象成员的理解上:

  • RefreshWithRefreshAll是WorkbookConnection的属性,可以通过赋值来修改它的状态
  • 而Delete是WorkbookConnection和WorkbookQuery的方法,它是用来执行删除操作的动作,不能像属性那样给它赋值布尔值,这就是触发「Assignment to constant not permitted」错误的核心原因

修正后的完整代码

感谢BigBen提供的修正思路,调整为用If判断符合条件后直接调用Delete方法:

Sub DeleteConnections()
    Dim cn As WorkbookConnection
    Dim qr As WorkbookQuery
    For Each cn In ActiveWorkbook.Connections
        If cn.Name Like "*BPTable (*" Or cn.Name Like "*BPResourceChart (*" Or cn.Name Like "*BPFlowSteps (*" _
        Or cn.Name Like "*BPDayChart (*" Or cn.Name Like "*BPResource (*" Or cn.Name Like "*BPTable2 (*" _
        Or cn.Name Like "*BPHistoric (*" Or cn.Name Like "*BPHistoryHours (*" Then
            cn.Delete
        End If
    Next
    For Each qr In ActiveWorkbook.Queries
        If qr.Name Like "BPTable (*" Or qr.Name Like "BPResourceChart (*" Or qr.Name Like "BPFlowSteps (*" _
        Or qr.Name Like "BPDayChart (*" Or qr.Name Like "BPResource (*" Or qr.Name Like "BPTable2 (*" _
        Or qr.Name Like "BPHistoric (*" Or qr.Name Like "BPHistoryHours (*" Then
            qr.Delete
        End If
    Next
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:02:45