如何解决 VBA \\'[TFS Excel Add-in CommandBarButton] 的方法执行失败\\’ 运行时错误

How do I resolve a VBA 'Method Execute of a [TFS Excel Add-in CommandBarButton] failed' Run-time error

我正在尝试编写一个宏来获取/刷新 Excel 2016 中的 Azure DevOps 查询(通过 TFS Excel 加载项/团队功能区),以便我可以使用提取的数据来运行一些计算并生成进度报告.我从 2010 年开始在线找到代码以刷新团队查询(即"为 TFS Excel 加载项编程",位于 (https://blogs.msdn.microsoft.com/team_foundation/2010/11/06/programming- for-the-tfs-excel-add-in/) 但是当我尝试运行宏时,我收到了 "refreshControl.Execute" 行的运行时错误,指示: "Run-time error \\'-2147467259 (80004005 )\\' 对象 \\'_CommandBarButton\\' 的方法 \\'execute\\' 失败"。

但由于某种原因,当我在 (refreshControl.Execute) 行之前放入 \\'Msgbox " \\' 行时,它会成功运行并刷新,但我正在自动运行该过程而无需人工干预(作为计划任务),所以我不能将那个 msgbox 保留在那里,因为它总是会生成。如果有帮助,我正在使用 Windows 10 和 Excel 2016 Professional Plus,代码如下。

附言我尝试添加等待时间而不是 Msgbox(以防它是时间问题),但仍然出现错误。 (注意:手动按下团队功能区中的刷新按钮可以正常工作)。非常感谢您的解决方案或任何帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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


我似乎已经通过在我的 Sub Macro1 的第一行中选择一个不同的单元格来解决它(即将 \\'Range("A1").Select\\' 更改为 \\'Range("A2") 。选择\\')。我一直在网上搜索解决方案并遇到了这个页面(https://support.microsoft.com/en-ca/help/983119/run-time-error-2147467259-80004005-when-you-programmatically-set- a-pro) 这表明"运行时错误 \\'-2147467259 (80004005)\\' "通常与受保护的工作表相关联,并将取消保护工作表作为一种解决方法。

即使我的工作表本身没有受到保护,TFS Excel 加载项查询结果也使用生成的表格区域的第一行(在我的情况下为第 1 行)仅提供信息,因此在某种程度上是"保护"该行,因此无法选择或编辑。因此,我更改了我的代码以选择第二行中的一个单元格,并且代码运行没有错误并刷新了查询结果。

我想分享这个,以防有人遇到相同或相似的问题,这会有所帮助。