2017-02-23 21 views
0

ブックを開いてマクロを実行すると、すべてのコードが正常に実行されます。データを変更せずにマクロを再実行すると、エラーが発生します。このエラーは具体的には.Findで発生し、実際に指定された範囲内の日付が見つかるとNothingを返します。Excel VBA .findは最初のマクロ実行時には動作しますが、秒では動作しません。

私はデバッグツールを使いましたが、すべてのアカウントで、なぜ.FindNothingを返すのか分からず、最初のマクロではなく2番目のマクロが実行されます。

問題の行がある:マクロDateFindを実行している

Set DateFind = .Find(what:=TripFind.Offset(0, 2).Value, LookAt:=xlWhole, _ 
        MatchCase:=False, SearchFormat:=False) 

初めて正しい値を返します。 2回目のマクロの実行DateFindNothingを返しますが、すべてのアカウントでマクロの最初の実行時と同じ値を返す必要があります。

ここに完全なコードセクションがあります: **コードの最初の部分はうまく動作します。 「など...日番号を追加しますから始まる第二の部分は重要な部分である*

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" 

答えて

0

Range.Findメソッドのパラメータはオプションです。日付を探しているときしかし、非常には、それが既存の設定を使用する検索パラメータを設定しない場合は、常にルッキンパラメータ

Set TripFind = .Find(what:=CDate(TripCal.Cells(TripCounter, "B")), LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) 

を設定することをお勧めします。

+0

それは働いた!私が追加する必要があったのは、LookIn:= xlFormulasでした。すべてのマクロで実行されます。私がそれを見たことがないと思うので、追加した "CDate"を見るのは興味深いですが、私はそれを追加する必要はありませんでした。最後のコード行は、これまでのところうまく動作します: Set DateFind = .Find(what:= TripFind.Offset(0、2).Value、LookIn:= xlFormulas、LookAt:= xlWhole、MatchCase:= False、SearchFormat:= False) – Walkintall

2

.Findデフォルトでアクティブセルの後に見える - 。だろうとあなたがSet DateFind = .Find(what:=TripFind.Offset(0, 2).Value, After:=TripsOffered.Range(TripsOffered.Cells(5, Session2), LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)

にその行を変更した場合すべてのセルをチェックしてください

+0

こんにちは@Jeremy、ありがとうございました。 '.Find'行の上に 'With'ステートメントを使用している間、私は範囲を指定しているので、デフォルトに頼らないことは私の理解です。私はしかし、試してみた後:=セル(1,1) 'と私は'タイプの不一致(エラー13) 'を思い付いた – Walkintall

+0

あなたの助けをありがとう。私はあなたの編集をしようとしなかった。 Docmartiが提案したように、「LookIn:= xlFormulas」を追加しました。しかし、私は最初に、あなたがより具体的に見てどこを見極めるべきかを定義しようとしましたが、それもうまくいかなかったのですが、何か間違ったことをしている可能性があります。再度、感謝します!維持し続ける! – Walkintall

関連する問題