2015-03-31 93 views
-1

感謝您閱讀我的文章。我是Excel VBA的新手,並且遇到了調試Find()調用的問題。我已經瀏覽了這個網站和其他網站上的多篇文章,但到目前爲止,我嘗試過的每個修復都失敗了。查找()結果爲Object變量或With Block變量未設置

我正在編寫代碼來處理財務報告中的元素。每個報告包含一個或多個多行多列單元格,其中包含描述項目的詳細信息。每個塊的大小不一致,但每個塊始終在左上角以「客戶名稱」開頭。所以我想通過這些塊來遍歷這些文本,然後抽出需要的元素。

這裏沒有while循環,因爲我遇到了錯誤只是設置了第一個條件。

運行時錯誤「91」:對象變量或帶塊變量未設置

下面的代碼從小組內的部分,與在最終的線來分配cursorProject錯誤:

' store the next report to process 
Dim nextReport As String 
Dim sourceSheetName As String 
Dim sheetSource As Worksheet 
nextReport = rptMedia 
' copy the worksheet into rptBurn and get that worksheet's name 
sourceSheetName = GetSheet(nextReport) 
Set sheetSource = Workbooks(rptBurn).Worksheets(sourceSheetName) 
sheetSource.Cells.EntireRow.Hidden = False 
sheetSource.Cells.EntireColumn.Hidden = False 
Workbooks(rptBurn).Activate 

' process the sheetSource into sheetCurrent 
' set constants 
Const constCursorKey As String = "Client Name" 
Const constClientColumn As String = "B" 
Const constClientNameOffset As Integer = 2 
Const constProjectLeft As Integer = 2 
Const constProjectRight As Integer = 52 
' get range in Client Name column of project entries 
Dim cursorStart As Long 
Dim cursorEnd As Long 
Dim cursorProject As Range 
Dim rangeProject As Range 
Dim rangeSearch As Range 

cursorStart = sheetSource.Columns(2).Find(constCursorKey).Row + constClientNameOffset 
' find the last project entry in the sheet 
cursorEnd = sheetSource.Range("B" & Rows.Count).End(xlUp).Row 
Set rangeSearch = sheetSource.Range(Cells(cursorStart + 1, constProjectLeft), _ 
         Cells(cursorEnd, constProjectLeft)) 
cursorProject = rangeSearch.Find(What:=constCursorKey, LookIn:=xlValues, LookAt:=xlPart, _ 
        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _ 
        SearchFormat:=False) 

這是非常草率目前爲部分將被移出到其在遍歷的報告(因此nextReport在這裏硬編碼到一個特定的報告名稱)叫自己的子。各種常量是報告的固定參數。未列出的值如「rptBurn」是全局變量。 GetSheet函數運行良好,但如果你想看到它:

Private Function GetSheet(rpt As String) As String 
    Workbooks.Open rootPath + rpt 
    ActiveSheet.Copy after:=Workbooks(rptBurn).Sheets(Workbooks(rptBurn).Sheets.Count) 
    GetSheet = ActiveSheet.Name 
    Workbooks(rpt).Close 
End Function 

我已經嘗試了幾個變化。當地人都看起來很有希望,直到錯誤。我基於另一篇文章將隱藏屬性設置爲False。我試着下到基礎簡化呼叫,並使用帶,像這樣:

Set rangeSearch = Sheets(3).Range("B:B") 
    rangeSearch.Select 
    With rangeSearch 
     cursorProject = .Find("Client Name") 
    End With 

但我總是cursorProject得到一個錯誤。我正在測試的工作表中肯定有很多「客戶名稱」條目。我把選擇來驗證我抓住了正確的範圍;奇怪的是,我發現在簡單版本中突出顯示了「B:AX」(AX是報告中最右邊使用的列),但是我期望在原始版本中選擇「B:AX」。無論哪種選擇都有「客戶名稱」實例 - 我可以選擇B4並查看「客戶名稱」。

我在做什麼錯?

+2

請嘗試用'Set cursorProject ='替換'cursorProject ='。 – BrakNicku 2015-03-31 08:54:43

+1

很多工作進入了這個問題,令人欽佩,而且做得很好。但是有很多不必要的文字/信息。請閱讀[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。在我看來,發生錯誤的主要描述和最後的代碼塊以及其他一些信息足以滿足要求。但是,我再次讚賞你的努力。 @ user3964075得到它btw。 cursorProject是一個範圍。你需要'set' keywort來分配它。 – 2015-03-31 09:13:01

+0

謝謝。現在你指出了,這個錯誤是一個額頭 - sla子手。我盯着它太久了。並感謝指導編寫示例。我在搜索時看到了幾個非常短的問題,並希望留下足夠的信息。 – passingwords 2015-03-31 16:10:41

回答

1

Cursorproject是一個對象變量(範圍)。你不能簡單地將一個值賦給一個對象變量,你必須設置它。

dim strSomeTextVarible as string 
dim rngSomeCellsObjectVariable as range 

strSomeTextVarible = "abc" 

set rngSomeCellsObjectVariable = range("a1:c3") 
+0

感謝您的回答! – passingwords 2015-03-31 16:11:11

相關問題