感謝您閱讀我的文章。我是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並查看「客戶名稱」。
我在做什麼錯?
請嘗試用'Set cursorProject ='替換'cursorProject ='。 – BrakNicku 2015-03-31 08:54:43
很多工作進入了這個問題,令人欽佩,而且做得很好。但是有很多不必要的文字/信息。請閱讀[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。在我看來,發生錯誤的主要描述和最後的代碼塊以及其他一些信息足以滿足要求。但是,我再次讚賞你的努力。 @ user3964075得到它btw。 cursorProject是一個範圍。你需要'set' keywort來分配它。 – 2015-03-31 09:13:01
謝謝。現在你指出了,這個錯誤是一個額頭 - sla子手。我盯着它太久了。並感謝指導編寫示例。我在搜索時看到了幾個非常短的問題,並希望留下足夠的信息。 – passingwords 2015-03-31 16:10:41