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 行)仅提供信息,因此在某种程度上是"保护"该行,因此无法选择或编辑。因此,我更改了我的代码以选择第二行中的一个单元格,并且代码运行没有错误并刷新了查询结果。
我想分享这个,以防有人遇到相同或相似的问题,这会有所帮助。