没有对象variables设置使用多个range.find和findnext()

我试图在另一个Range.Find中search一个人的名字,但我一直得到运行时错误91 – 对象variables或未设置块variables。 “getPaid”中出现“rngFound”的情况。

Sub EmailClick() Dim lastSeasonRow As Double lastSeasonRow = Worksheets("Season 2014-2015").Range("A" & Worksheets("Season 2014-2015").Rows.Count).End(xlUp).Row Dim lastSeasonEmailRow1 As Double lastSeasonEmailRow1 = Worksheets("Email").Range("A" & Worksheets("Email").Rows.Count).End(xlUp).Row Dim rng As Range Dim rngFound As Range Dim getPaid As Range Dim ErrorEmail As String Dim colMyCol As New Collection 'Our collection For j = 2 To lastSeasonRow Set rng = Worksheets("Email").Range("A2:A" & lastSeasonEmailRow1) Set rngFound = rng.Find(Worksheets("Season 2014-2015").Cells(j, 1).Value) If Not rngFound Is Nothing Then ' If its Found If DoesItemExist(colMyCol, rngFound.Offset(0, 1).Value) = False Then 'Check If Already completed swimmer's family Dim CountSwimmers As String CountSwimmers = Application.CountIf(Worksheets("Email").Range("C2:C" & lastSeasonEmailRow1), rngFound.Offset(0, 2).Value) If CountSwimmers > 1 Then For s = 1 To CountSwimmers If s = 1 Then 'If first swimmer Set rng = Worksheets("Email").Range("C2:C" & lastSeasonEmailRow1) Set rngFound = rng.Find(rngFound.Offset(0, 2).Value) Debug.Print rngFound.Offset(0, -2).Value Set rngBFound = rngFound Else 'Next swimmer in family Set rngFound = rng.FindNext(rngFound) Debug.Print rngFound.Offset(0, -2).Value ********************** When Debugging, above line is Highlighted. End If ********************************' TODO: Grab Worksheet's Name with persons' name and get Money column** Set getPaid = Worksheets("Season 2014-2015").Range("A2:A" & lastSeasonRow).Find(rngFound.Offset(0, -2).Value) If Not getPaid Is Nothing Then 'If its found If getPaid.Offset(0, 14).Value <> "" Then 'If they do owe money Debug.Print getPaid.Offset(0, 14).Value Else End If End If Next s 'write name to list, if name in array skip it, when lastSeasonRow, remove array. colMyCol.Add (rngFound.Offset(0, -1).Value) 'TODO: change values below to strings that will correspond with aboves combined values If rngFound.Value = "Michael" Then Call Send_Email_Using_VBA(rngFound.Offset(0, 2).Value, rngFound.Offset(0, 1).Value, rngFound.Value, Worksheets("Season 2014-2015").Cells(j, 15).Value) End If Else Debug.Print rngFound.Value If Worksheets("Season 2014-2015").Cells(j, 15).Value <> "" Then 'If they do owe money If rngFound.Offset(0, 3).Value <> "" Then 'if multiple emails (primary and cc) If rngFound.Value = "Michael" Then Call Send_Email_Using_VBA(rngFound.Offset(0, 2).Value, rngFound.Offset(0, 1).Value, rngFound.Value, Worksheets("Season 2014-2015").Cells(j, 15).Value, rngFound.Offset(0, 3).Value) End If Else If rngFound.Value = "Michael" Then Call Send_Email_Using_VBA(rngFound.Offset(0, 2).Value, rngFound.Offset(0, 1).Value, rngFound.Value, Worksheets("Season 2014-2015").Cells(j, 15).Value) End If End If End If End If End If Else ErrorEmail = ErrorEmail + Worksheets("Season 2014-2015").Cells(j, 1).Value + vbNewLine End If Next j If ErrorEmail <> "" Then MsgBox ("No Email Found For: " & vbNewLine & ErrorEmail) End If End Sub 

谢谢

编辑:添加图像数据参考:

电子邮件工作表 电子邮件工作表


2014-2015年工作表 2014-2015年工作表

对于这个build议的解决scheme,您需要更改getPaidvariables来inputlong,并添加一个types为double的variables(例如, gotPaid )。

 Dim getPaid As Long, gotPaid As Double 

更改以下代码部分。

  Set getPaid = Worksheets("Season 2014-2015").Range("A2:A" & lastSeasonRow).Find(rngFound.Offset(0, -2).Value) If Not getPaid Is Nothing Then 'If its found If getPaid.Offset(0, 14).Value <> "" Then 'If they do owe money Debug.Print getPaid.Offset(0, 14).Value Else End If End If 

对此。

  With Worksheets("Season 2014-2015") gotPaid = Application.SumIfs(.Columns("O"), .Columns("A"), rngFound.Offset(0, -2).Value) getPaid = Application.CountIfs(.Columns("A"), rngFound.Offset(0, -2).Value) If CBool(getPaid) Then 'If its found If CBool(gotPaid) Then 'If they do owe money Debug.Print rngFound.Offset(0, -2).Value & ": " & gotPaid Else End If End If End With 

通过洗掉第二次查找操作,您不会重新定义第一个查找操作,并且.FindNext应该保持运行,直到您遇到CountSwimmers号码。 或者你可以做到这一点不重复使用相同的variables,但工作表函数应该在这里工作。

由于你的专业帮手function如DoesItemExist这不能被testing,但它确实编译。