Я пытаюсь написать макрос для получения / обновления запроса 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