Надстройка Excel VBA ADO/TFS поддерживает обновление запроса ADO на листе с использованием константы IDC_REFRESH. Подробности см. в разделе (Не удалось выполнить действие на CommandBarButton для обновления рабочих элементов).
Я также хотел бы иметь возможность публиковать запрос с использованием макроса vba, но не смог этого понять.
Я много раз искал документацию о возможности вызова кнопки «Опубликовать».
Безуспешно. Я также попытался изменить свой код, чтобы найти кнопку/элемент управления «Опубликовать», используя IDC_PUBLISH и тот же код, который указан в ссылке stackoverflow выше.
Кто-нибудь знает, возможно ли это вообще?
Я считаю, что ответ на ваш вопрос — да. У меня есть запрос TFS/ADO в таблице Excel. У меня есть макрос, который может обновить этот запрос. Я хотел бы обновить несколько полей в результате запроса, а затем макрос опубликует измененное содержимое запроса обратно в TFS. Ниже приведен фрагмент кода, который я использую для поиска кнопки «Обновить» плагина TFS/ADO. Как использовать макрос, чтобы найти кнопку «Опубликовать»? ... Установить RefreshControl = FindTeamControl("IDC_REFRESH") ... Частная функция FindTeamControl(tagName As String) As CommandBarControl
Можете ли вы подтвердить, что код, которым вы поделились, успешно находит кнопку «Обновить»? Я хочу убедиться, что мы находимся на одной волне.
Да, макрос отлично работает с кнопкой обновления. И я написал больше vba для изменения состояний рабочих элементов и добавления тегов. Все это работает нормально.
Когда вы определите ("IDC_PUBLISH")
, с какой ошибкой вы столкнетесь?
Это имя тега не существует. Чтобы найти элемент управления «Публикация», вам понадобится тег IDC_SYNC. Посмотрите ответ, который я предоставил. Спасибо за помощь, Кевин!
Хорошо, Кевин Лу-MSFT дал мне достаточно информации, чтобы во всем разобраться. Спасибо, Кевин! Вот обновленная версия подпрограммы, которая существует уже много лет. Эта подпрограмма принимает интересующую подстроку имени элемента управления в качестве аргумента, а затем выполняет этот элемент управления.
Я проверил это, и это работает! Я надеюсь, что это поможет кому-то еще.
Call ExecuteTeamControlOnWorksheet("OneFeature", "IDC_REFRESH") ' Execute Refresh
Call ExecuteTeamControlOnWorksheet("OneFeature", "IDC_SYNC") ' Execute Publish
Private Sub ExecuteTeamControlOnWorksheet(worksheetName As String, teamControlName As String)
Dim activeSheet As Worksheet
Dim teamQueryRange As Range
Dim refreshControl As CommandBarControl
Set refreshControl = FindTeamControl(teamControlName)
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 activeSheet = ActiveWorkbook.activeSheet
Set teamQueryRange = Worksheets(worksheetName).ListObjects(2).Range
teamQueryRange.Worksheet.Select
teamQueryRange.Select
refreshControl.Execute
activeSheet.Select
Application.ScreenUpdating = True
'MsgBox "Completed " + worksheetName + " Query "
Debug.Print "Completed " + worksheetName + " Query "
End Sub
Private Function FindTeamControl(tagName As String) As CommandBarControl
Dim commandBar As commandBar
Dim teamCommandBar As commandBar
Dim control As CommandBarControl
' Caption is the name displayed on the Control on the Excel Team Tab
' Tag is the Tag name for that control. This is the string this
' The original example of this dropped the -TBB off the end,
' so I've been following this practice
' To find the Refresh button, use IDC_REFRESH, for Publish use IDC_SYNC
' Caption : Tag
' New List : IDC_NEW_WI_LIST-TBB
' Get Work Items : IDC_IMPORT-TBB
' Publish : IDC_SYNC-TBB
' Refresh : IDC_REFRESH-TBB
' List : IDC_CONFIGURE_LIST-TBB
' Choose Columns : IDC_COLUMN_CHOOSER-TBB
' Links and Attachments : IDC_LINKS_ATTACHMENTS-TBB
' Open in Web Access : IDC_OPEN_IN_WEB_ACCESS-TBB
' Select User : IDC_IDENTITY_PICKER-TBB
' Add Tree Level : IDC_ADD_SUBLEVEL_COLUMN-TBB
' Add Child : IDC_ADD_NEW_CHILD-TBB
' Indent : IDC_INDENT-TBB
' Outdent : IDC_OUTDENT-TBB
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
Говоря о запросе на публикацию, вы имеете в виду, что вам нужно опубликовать новый список рабочих элементов в запросе к TFS? Можете ли вы поделиться существующим кодом по текущей проблеме?