ブックを開いてマクロを実行すると、すべてのコードが正常に実行されます。データを変更せずにマクロを再実行すると、エラーが発生します。このエラーは具体的には.Find
で発生し、実際に指定された範囲内の日付が見つかるとNothing
を返します。Excel VBA .findは最初のマクロ実行時には動作しますが、秒では動作しません。
私はデバッグツールを使いましたが、すべてのアカウントで、なぜ.Find
がNothing
を返すのか分からず、最初のマクロではなく2番目のマクロが実行されます。
問題の行がある:マクロDateFind
を実行している
Set DateFind = .Find(what:=TripFind.Offset(0, 2).Value, LookAt:=xlWhole, _
MatchCase:=False, SearchFormat:=False)
初めて正しい値を返します。 2回目のマクロの実行DateFind
Nothing
を返しますが、すべてのアカウントでマクロの最初の実行時と同じ値を返す必要があります。
ここに完全なコードセクションがあります: **コードの最初の部分はうまく動作します。 「など...日番号を追加しますから始まる第二の部分は重要な部分である*
ElseIf TripCal.Range("A1") = "SESSION 2" Then
'-----Copies and pastes cabin numbers into tripcal-----
For TotalRowsOffered = 5 To 168
If TotalRowsOffered >= Level1Offered And TotalRowsOffered < Level2Offered And TripsOffered.Cells(TotalRowsOffered, Session2) <> "" Then
a = TotalRowsOffered - 6
TripCal.Cells(TotalRowsOffered + a, "B") = TripsOffered.Cells(TotalRowsOffered, Session2).Value
ElseIf TotalRowsOffered >= Level2Offered And TotalRowsOffered < Level3Offered And TripsOffered.Cells(TotalRowsOffered, Session2) <> "" Then
a = TotalRowsOffered - 8
TripCal.Cells(TotalRowsOffered + a, "B") = TripsOffered.Cells(TotalRowsOffered, Session2).Value
ElseIf TotalRowsOffered >= Level3Offered And TotalRowsOffered < Level4Offered And TripsOffered.Cells(TotalRowsOffered, Session2) <> "" Then
a = TotalRowsOffered - 10
TripCal.Cells(TotalRowsOffered + a, "B") = TripsOffered.Cells(TotalRowsOffered, Session2).Value
ElseIf TotalRowsOffered >= Level4Offered And TotalRowsOffered < Level5Offered And TripsOffered.Cells(TotalRowsOffered, Session2) <> "" Then
a = TotalRowsOffered - 12
TripCal.Cells(TotalRowsOffered + a, "B") = TripsOffered.Cells(TotalRowsOffered, Session2).Value
ElseIf TotalRowsOffered >= Level5Offered And TripsOffered.Cells(TotalRowsOffered, Session2) <> "" Then
a = TotalRowsOffered - 14
TripCal.Cells(TotalRowsOffered + a, "B") = TripsOffered.Cells(TotalRowsOffered, Session2).Value
End If
Next
'-----Adds day number of trip for each cabin-----
For TripCounter = 4 To 323
If TripCal.Cells(TripCounter, "B") = "" Then
'Skips if there is no trip name accounted for _
beside the level on the Trip Calender
Else
With TripsOffered.Range(TripsOffered.Cells(5, Session2), TripsOffered.Cells(168, Session2))
Set TripFind = .Find(what:=TripCal.Cells(TripCounter, "B"), LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not TripFind Is Nothing Then
Tripdays = TripFind.Offset(0, 4).Value - TripFind.Offset(0, 2).Value
With TripCal.Range(TripCal.Cells(1, 3), TripCal.Cells(1, LastDate))
Set DateFind = .Find(what:=TripFind.Offset(0, 2).Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
If Not DateFind Is Nothing Then
For TripDayCount = 0 To Tripdays
TripCal.Cells(TripCounter, DateFind.Column + TripDayCount) = TripDayCount + 1
Next
Else
MsgBox ("The Trip Date for " & TripFind.Value & " is outside of the current session dates." & vbNewLine & vbNewLine & "Please check the trip dates in the 'Trips Being Offered' sheet for " & TripFind.Value & " in Session 2.")
End If
End With
End If
End With
End If
TripCounter = TripCounter + 1
Next
ElseIf TripCal.Range("A1") = "SESSION 3" Then
'the above code repeat depending on Range "A1"
それは働いた!私が追加する必要があったのは、LookIn:= xlFormulasでした。すべてのマクロで実行されます。私がそれを見たことがないと思うので、追加した "CDate"を見るのは興味深いですが、私はそれを追加する必要はありませんでした。最後のコード行は、これまでのところうまく動作します: Set DateFind = .Find(what:= TripFind.Offset(0、2).Value、LookIn:= xlFormulas、LookAt:= xlWhole、MatchCase:= False、SearchFormat:= False) – Walkintall