Можете ли вы с помощью Excel VBA опубликовать запрос, в который внесли изменения?

Надстройка Excel VBA ADO/TFS поддерживает обновление запроса ADO на листе с использованием константы IDC_REFRESH. Подробности см. в разделе (Не удалось выполнить действие на CommandBarButton для обновления рабочих элементов).

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

Я много раз искал документацию о возможности вызова кнопки «Опубликовать».

Безуспешно. Я также попытался изменить свой код, чтобы найти кнопку/элемент управления «Опубликовать», используя IDC_PUBLISH и тот же код, который указан в ссылке stackoverflow выше.

Кто-нибудь знает, возможно ли это вообще?

Говоря о запросе на публикацию, вы имеете в виду, что вам нужно опубликовать новый список рабочих элементов в запросе к TFS? Можете ли вы поделиться существующим кодом по текущей проблеме?

Kevin Lu-MSFT 23.07.2024 09:42

Я считаю, что ответ на ваш вопрос — да. У меня есть запрос TFS/ADO в таблице Excel. У меня есть макрос, который может обновить этот запрос. Я хотел бы обновить несколько полей в результате запроса, а затем макрос опубликует измененное содержимое запроса обратно в TFS. Ниже приведен фрагмент кода, который я использую для поиска кнопки «Обновить» плагина TFS/ADO. Как использовать макрос, чтобы найти кнопку «Опубликовать»? ... Установить RefreshControl = FindTeamControl("IDC_REFRESH") ... Частная функция FindTeamControl(tagName As String) As CommandBarControl

Wade Scherer 24.07.2024 22:22

Можете ли вы подтвердить, что код, которым вы поделились, успешно находит кнопку «Обновить»? Я хочу убедиться, что мы находимся на одной волне.

Kevin Lu-MSFT 25.07.2024 08:53

Да, макрос отлично работает с кнопкой обновления. И я написал больше vba для изменения состояний рабочих элементов и добавления тегов. Все это работает нормально.

Wade Scherer 25.07.2024 16:22

Когда вы определите ("IDC_PUBLISH"), с какой ошибкой вы столкнетесь?

Kevin Lu-MSFT 26.07.2024 10:48

Это имя тега не существует. Чтобы найти элемент управления «Публикация», вам понадобится тег IDC_SYNC. Посмотрите ответ, который я предоставил. Спасибо за помощь, Кевин!

Wade Scherer 26.07.2024 23:27
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
6
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, Кевин Лу-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

Другие вопросы по теме