【问题标题】:VBA Deleting Connections, "Assignment to constant not permitted" ErrorVBA 删除连接,“不允许分配给常量”错误
【发布时间】:2021-04-09 15:50:33
【问题描述】:

我正在尝试使用 VBA 删除重复的查询。我使用了一个类似的宏来关闭特定连接的全部刷新时的刷新,但我似乎在将相同的概念应用于删除时遇到了问题。

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

感谢 BigBen 的完整代码解决方案:

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

【问题讨论】:

    标签: excel vba powerquery excel-2016


    【解决方案1】:

    您混淆了方法和属性。

    WorkbookConnection.DeleteWorkbookQuery.Delete 是被调用的方法;无法像您尝试的那样分配布尔值。

    相比之下,WorkbookConnection.RefreshWithRefreshAll 是可以更改的属性。1

    改变

    cn.Delete = ....
    

    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
    

    对于查询也是如此。

    1 请注意,属性可以是只读的。如文档中所述,RefreshWithRefreshAll 是读/写。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多