Как решить VBA «Метод Выполнение [TFS Excel Надстройка CommandBarButton] не удалось» Ошибка времени выполнения - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь написать макрос для получения / обновления запроса Azure DevOps в Excel 2016 (с помощью надстройки TFS Excel / ленты команд), чтобы я мог использовать полученные данные для выполнения некоторых вычислений и создания отчета о ходе выполнения. , В 2010 году я обнаружил код в сети, чтобы обновить командный запрос (т. Е. «Программирование для надстройки TFS Excel» в (https://blogs.msdn.microsoft.com/team_foundation/2010/11/06/programming-for-the-tfs-excel-add-in/)), но когда я пытаюсь запустить макрос, я получаю ошибку времени выполнения для «refreshControl». Строка "Выполнить", указывающая: "Ошибка времени выполнения" -2147467259 (80004005) 'Метод' выполнить 'объекта' _CommandBarButton 'не выполнен'.

По какой-то причине, когда я помещаю строку «Msgbox» перед этой строкой (refreshControl.Execute), она запускается успешно и обновляется, но я автоматизирую процесс, чтобы он выполнялся без вмешательства человека (как запланировано) задача), так что я не могу держать этот msgbox там, потому что он всегда будет генерироваться. Я пользуюсь Windows 10 и Excel 2016 Professional Plus, если это полезно, и код приведен ниже.

P.S. Я попытался добавить время ожидания вместо Msgbox (на случай, если это была проблема с синхронизацией), но все равно получил ошибку. (Примечание: ручное нажатие кнопки «Обновить» на ленте команды работает нормально). Резолюция или любая помощь будет высоко ценится.

Sub Macro1()

Range("A1").Select
RefreshTeamQuery ("Sheet1")

End Sub

Private Function FindTeamControl(tagName As String) As CommandBarControl

Dim commandBar As commandBar
Dim teamCommandBar As commandBar
Dim control As CommandBarControl

For Each commandBar In Application.CommandBars
    If commandBar.Name = "Team" Then
        Set teamCommandBar = commandBar
        Exit For
    End If
Next

If Not teamCommandBar Is Nothing Then
    For Each control In teamCommandBar.Controls
        If InStr(1, control.Tag, tagName) Then
            Set FindTeamControl = control
            Exit Function
        End If
    Next
End If

End Function

Sub RefreshTeamQuery(shtTFSExcel_Name As String)

Dim actvSheet As Worksheet
Dim teamQueryRange As Range
Dim refreshControl As CommandBarControl

Set refreshControl = FindTeamControl("IDC_REFRESH")

If refreshControl Is Nothing Then
    MsgBox "Could not find Team Foundation commands in Ribbon. Please make sure that the Team Foundation Excel plugin is installed.", vbCritical
    Exit Sub
End If

' Disable screen updating temporarily so that the user doesn't see us selecting a range
Application.ScreenUpdating = False

' Capture the currently active sheet, we will need it later
Set actvSheet = ActiveWorkbook.activeSheet
Set teamQueryRange = Worksheets(shtTFSExcel_Name).ListObjects(1).Range

teamQueryRange.Worksheet.Select
teamQueryRange.Select

'Msgbox ""
refreshControl.Execute

actvSheet.Select
Application.ScreenUpdating = True

End Sub

1 Ответ

1 голос
/ 08 мая 2019

Я, кажется, решил ее, выбрав другую ячейку в первой строке моего Sub Macro1 (т.е. изменил «Range» («A 1 »). Выберите «to» Range («A * 1003») * 2"). Select '). Я искал в Интернете разрешение и наткнулся на эту страницу (https://support.microsoft.com/en-ca/help/983119/run-time-error-2147467259-80004005-when-you-programmatically-set-a-pro), в которой указывалось, что «Ошибка времени выполнения -2147467259 (80004005)» »обычно связана с защищенными листами и снимает защиту листа как обходной путь.

Даже если сам мой лист не защищен, результаты запроса надстройки TFS Excel используют первую строку сгенерированной области таблицы (в моем случае, строку 1) для предоставления только информации и так или иначе «защищает» эту строку, поэтому ее нельзя выбрать или отредактировать. Поэтому я изменил свой код, чтобы выбрать ячейку во 2-й строке, и код запустился без ошибок и обновил результаты запроса.

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

...