感谢您阅读我的帖子。我是Excel VBA的新手,并且遇到调试Find()的调用。我已经浏览了这个网站和其他网站的几个帖子,但到目前为止,我尝试过的每个修复都没有成功。
我正在编写代码来处理财务报告中的元素。每个报告包含一个或多个多行&多列单元格细节,其中包含描述项目的详细信息。每个块的大小不一致,但每个块的总是从左上角开始“客户端名称”。所以我想迭代这些块来关闭那个文本,然后拉出所需的元素。
这里还没有while循环,因为我遇到了错误,只是设置了第一个条件。
运行时错误'91':对象变量或未设置块变量
这是Sub中代码的一部分,错误出现在最后一行,分配了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)
目前这非常草率,因为在迭代报告时,部件将被移出到自己的Sub(因此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。我已经尝试将调用简化为基础并使用With,如下所示:
Set rangeSearch = Sheets(3).Range("B:B")
rangeSearch.Select
With rangeSearch
cursorProject = .Find("Client Name")
End With
但我总是在cursorProject上出错。我正在测试的工作表中肯定有很多“客户端名称”条目。我放入选择以验证我正在抓住正确的范围;奇怪的是,我发现在简单版本中突出显示“B:AX”(AX是报告中最右侧使用的列),但我在原始版本中的选择。无论选择中有“客户名称”实例 - 我都可以选择B4并查看“客户名称”。
我做错了什么?
答案 0 :(得分:1)
Cursorproject是一个对象变量(范围)。您不能简单地为对象变量赋值,您必须设置它。
dim strSomeTextVarible as string
dim rngSomeCellsObjectVariable as range
strSomeTextVarible = "abc"
set rngSomeCellsObjectVariable = range("a1:c3")