如何使 Excel 从 TFS 2010 工作项查询中自动刷新

kro*_*ijk 3 excel vba excel-2007

我们使用 Microsoft 提供的默认 MSF Agile 5.0 流程模板来运行我们的项目。具体来说,Iteration Backlog Excel 表对于进行项目管理非常有用。

然而,我们遇到了第 1 页上的迭代积压工作不是最新的情况。打开 Excel 工作簿后,用户必须明确单击“团队”选项卡上的“刷新”按钮才能查看最新数据。

问题:我们如何强制 Excel (2007) 在打开工作簿时刷新迭代积压并与其连接的 TFS 2010 工作项查询同步?

其他人提供的记录宏以单击“刷新”按钮的建议不起作用,因为记录的宏无法使用树层次结构刷新查询(至少,执行宏时会发生错误告诉我)。录制的宏执行其他操作,只需单击按钮 :-)

Ano*_*ype 5

从MSDN库在列表类型的一些引物
列表的类型
转换一个输入列表,查询列表

现在谈谈手头的问题。
正如前面的回答者所说,您需要从工作簿打开事件运行的代码。我相信那部分你已经知道了。
refreshall 方法是通用的,仅适用于数据连接、公式和常规共享点列表。
您需要使用功能区中的团队菜单。
下面的代码片段展示了如何以及获取代表包含工作项数据的表的列表对象的方法。
通过 VBA 同步 TFS 和 Excel

如果链接中断了代码的部分复制(只需激活 Team 菜单)。他们文章中的 MSDN 链接看起来已经坏了(或者可能没有……)

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) '(rangeName As String)

    Dim activeSheet 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
End Sub
Run Code Online (Sandbox Code Playgroud)