Отключить выбор таблицы запроса при обновлении Power Query

#excel #vba #selection #powerquery #listobject

#excel #vba #выбор #powerquery #listobject

Вопрос:

Я написал следующий код в модуле рабочего листа, чтобы обновить таблицу Power Query, которая после обновления должна позволить выбрать ячейку B3 и добавить туда выпадающий список, используя уникальные значения из 1-го столбца таблицы. Я использую QueryTable_AfterRefresh() метод, чтобы указать, является ли Query refresh completed successfully .

 Private WithEvents table As Excel.QueryTable

Private Sub table_AfterRefresh(ByVal Success As Boolean)
    Do
        DoEvents
    Loop Until Success
    Me.Cells(3, "B").Select
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim Rng As Range, Rng1, V, Dict As Object, Frm As String

Set Rng = Me.Cells(3, "B")
Set table = Me.ListObjects("_Rpt4").QueryTable
Set Rng1 = table.ListObject.ListColumns("Answers").DataBodyRange

Set Dict = CreateObject("Scripting.Dictionary")
For Each V In Rng1.Cells
    On Error Resume Next
    Dict.Add Key:=CStr(V.Value), Item:=CStr(V.Value)
    On Error GoTo 0
Next V

Frm = Join(Dict.Keys, ",")

If Target.Address = "$D$3" Then
    With table
        .BackgroundQuery = False
        .Refresh BackgroundQuery:=False
    End With
    
    DoEvents
    AddDataValidation Rng:=Rng, sFormula:=Frm
    
ElseIf Target.Address = "$B$3" Then
    If Target.Value2 <> "" Then
        table.ListObject.Range.AutoFilter field:=1, Criteria1:=Target.Value2
        table.ListObject.ShowAutoFilterDropDown = False
    ElseIf Target.Value2 = "" Then
        table.ListObject.Range.AutoFilter field:=1
        table.ListObject.ShowAutoFilterDropDown = False
    End If
End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub


Sub AddDataValidation(Rng As Range, sFormula As String)
Application.EnableEvents = False
    With Rng.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=sFormula
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Application.EnableEvents = True
End Sub
  

Код работает нормально, однако таблица по-прежнему выделяется (выделяется), и выделение не перемещается в ячейку B3 (это происходит, только на короткое время).

Есть ли возможность или способ отключить выбор таблицы Power Query после успешного обновления запроса?

Комментарии:

1. Возможно, вам нужно отключить events ( Application.EnableEvents=False ) перед обновлением таблицы запросов и включить их после выбора B3 ( Application.EnableEvents=True ).

2. вы имеете в виду в table_AfterRefresh процедуре? Не работает! Таблица по-прежнему выделяется.

3. Отключите его в событии изменения листа перед обновлением таблицы запросов. Повторно включите его после того, как вы выбрали B3 в событии после обновления

4. @RonRosenfeld можете ли вы продемонстрировать на примере, что вы имели в виду?

5. У меня нет времени на настройку модели. Но я предполагаю, что проблема в том, что события запускаются, когда вы этого не хотите. Я попытаюсь что-нибудь настроить позже сегодня.