2017-05-27 3 views
0

Also habe ich einen Teil in meinem Makro, dass ich hinzufügen möchte, was ich nehme, muss ein "Else" Teil sein, aber ich bin nicht so gut mit Makros und bin um Hilfe bitten.Suche noch einmal, wenn nicht gefunden

Range("Z1").Copy 

Dim FindString As String 
Dim Rng As Range 
FindString = Sheets("Pull").Range("Y1").Value 
If Trim(FindString) <> "" Then 
    With Sheets("HourTracker").Range("A:A") 
     Set Rng = .Find(What:=FindString, _ 
         After:=.Cells(.Cells.Count), _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False) 
     If Not Rng Is Nothing Then 
      Application.Goto Rng, True 
     Else 
      MsgBox "Nothing found" 
     End If 
    End With 
      ActiveCell.Offset(0, 1).Activate 
      Selection.PasteSpecial xlPasteValues 
Application.DisplayAlerts = True 
    End If 

End Sub 

Also, was ich dazu tun möchte, ist anstelle von „MsgBox‚Nichts gefunden‘“, ich möchte es im Wesentlichen wie oben die gleiche Sache durchführen, aber kopieren Zelle Z2, und für den Wert von Y2 suchen Im selben Blatt "HourTracker" fügen Sie dann den Wert ein. Ich weiß nicht, wie ich das erreichen soll, und alle meine Versuche sind gescheitert. Jede Hilfe würde sehr geschätzt werden. Lassen Sie mich wissen, wenn Sie mehr Klärung benötigen, danke im Voraus!

Antwort

0

Klingt für mich wie Sie für eine Schleife suchen.

Sub findStuff() 

Application.DisplayAlerts = False 

' The item you want to paste 
Dim PasteString As String 

' The item you're looking for 
Dim FindString As String 

' The range that may containing FindString 
Dim Rng As Range 

' The variable used to loop through your range 
Dim iCounter as Long 

' loop through the first cell in column Y to the last used cell 
For iCounter = 1 To Sheets("Pull").Cells(Rows.Count, 25).End(xlUp).Row 

    ' PasteString = the current cell in column Z 
    PasteString = Sheets("Pull").Cells(iCounter, 26).Value 

    ' FindString = the current cell in column Y 
    FindString = Sheets("Pull").Cells(iCounter, 25).Value 


    If Trim(FindString) <> "" Then 
     With Sheets("HourTracker").Range("A:A") 

      ' Find the cell containing FindString 
      Set Rng = .Find(What:=FindString, _ 
          After:=.Cells(.Cells.Count), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 

      If Not Rng Is Nothing Then 
       ' There's no need to activate/ select the cell. 
       ' You can directly set the value with .Value 
       Rng.Offset(0, 1).Value = PasteString 
      Else 
       ' Do nothing 
      End If 

     End With 
    Else 
     ' Do nothing 
    End If 

Next 

Application.DisplayAlerts = True 

End Sub 

Jedes Mal, wenn der Compiler Next trifft es wieder an For startet aber den Wert von iCounter um 1 erhöhen Wir Cells können dies nimmt die Zeilen- und Spalten Argumente als Zahlen, nicht Strings seit Cells zu erreichen (wie Range). Die Syntax lautet einfach Cells(Row #, Column #). Jedes Mal, wenn die For . . . Next erneut umläuft, wird iCounter um eins erhöht und Sie suchen in der nächsten Zeile.

Anstatt .Paste zu verwenden, können Sie den Wert einer Zelle direkt mit .Value festlegen. Das Einfügen ist ziemlich langsam und die Verwendung von .Value ist viel schneller.

Cells().End(xlUp).Row ist eine Methode, um die zuletzt verwendete Zelle in einem Bereich zu finden. Siehe Error in finding last used cell in VBA für eine viel bessere Erklärung als ich hier geben kann.

Verwandte Themen