2017-10-09 24 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)。這可以解釋顯示的錯誤嗎? –

相關問題