2017-10-09 58 views
0

我正在创建一个链接到TFS查询的宏。在某些时候,我用的就是刷新每个结果表的功能,并在此之后,我需要知道该表的范围,因此我的代码看起来是这样的:如何解决函数返回错误91

Function RefreshQuery(shtTFSExcel_Name As String) As Range 
Dim activeSheet As Worksheet 
Dim teamQueryRange As Range 
Dim refreshControl As CommandBarControl 
Dim lr As Integer, lc As Integer 

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 Function 
    End If 

Application.ScreenUpdating = False 
Set activeSheet = ActiveWorkbook.activeSheet 
Set teamQueryRange = Worksheets(shtTFSExcel_Name).ListObjects(1).Range 
teamQueryRange.Worksheet.Select 
teamQueryRange.Select 
refreshControl.Execute 
activeSheet.Select 
Application.ScreenUpdating = True 

lr = teamQueryRange.Columns(1).Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
lc = teamQueryRange.Rows(2).Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

Set RefreshQuery = Cells(lr, lc) 

End Function 

现在,当我运行它,它是工作正常,直到它达到End Function声明,返回错误代码91(我正在观看RefreshQuery,这创造了预期的范围)。我无法确定是什么让它失败,因为它使用Set语句来分配对象,并且我有一个Range变量来获取函数的结果。 任何帮助将不胜感激。提前致谢。

+0

您是否检查过找到这些值,即lr和lc是实际的数字? – SJR

+1

此外,你最好摆脱'teamQueryRange.Worksheet.Select','teamQueryRange.Select'和'activeSheet.Select',并将你的'Set'改成'Set RefreshQuery = teamQueryRange.Cells(lr, lc)'或类似的。 – CLR

+0

@SJR,是的,这正是我通过'RefreshQuery'设置手表的原因,以验证这些值是否正确分配 –

回答

0

检查teamQueryRange是否为Nothing,在这种情况下刷新set teamQueryRange。

+0

已验证,它不是Nothing。我还注意到,在运行'Set RefreshQuery = teamQueryRange.Cells(lr,lc)'之前,我得到了一对范围的值(lr和lc),但是一旦赋值,新范围的值就是(lr + 1, LC)。这可以解释显示的错误吗? –