2017-11-20 4 views
0

Ich versuche, einen Dynamikbereich herauszufinden, der einen Bereich beginnend mit der aktiven Zelle in einer für jede Schleife auswählt. Wenn z. B. Zelle A2 für jede Zellenschleife ausgewählt ist, der Bereich in der Schleife A2: A20 und "IP" enthält, wird der Bereich A2: M2 ausgewählt, der Inhalt gelöscht und alle Werte verschoben unten, A3: M20, bis die leeren Zellen gefüllt sind.Dynamischer Bereich für jede Schleife

Sub deletewirelessdevice() 

Dim rng As Range 
Dim wksSource As Worksheet 


Set wksSource = ActiveWorkbook.Sheets("dt-attext") 

Set rng = wksSource.Range("A2:A500") 

For Each Cell In rng 
    If InStr(1, ActiveSheet.Range(ActiveCell).Value, "IP") > 0 Then 
     Range(ActiveCell, "M" & ActiveCell.Row).Select.Delete Shift:=xlUp 
Next Cell 

End Sub 

Ich bin nicht sicher, ob es ein Fehler bei der Auswahl und Löschung ist, da ich nicht den Code bekommen kann aufgrund eines Next ohne Kompilierung-Fehler zu laufen. Es gibt einen passenden für, also weiß ich nicht, was das Problem ist. Jeder Rat ist willkommen.

+0

Sie vermissen das 'End If'. Außerdem ändern Sie bei jeder Schleifeniteration nichts. Ersetzen Sie 'ActiveCell' gegebenenfalls durch' Cell' – Tom

+1

Ein fehlendes 'End If' verursacht Ihren Fehler. Aber 'Range (ActiveCell)' funktioniert nur, wenn die aktive Zelle eine Zellenadresse enthält. – SJR

+1

Sie können "ActiveSheet.Range (ActiveCell) .Value" durch "ActiveCell.Value" ersetzen, aber ich vermute, was Sie eigentlich wollen, ist 'Cell.Value2' – Tom

Antwort

2

Sie hatten eine Reihe von Problemen mit Ihrem Code, also habe ich ihn optimiert und gefolgert, was Sie vorhatten. Dies sollte funktionieren, aber lesen Sie die obigen Kommentare auch für einige Hinweise, wie Sie beim nächsten Mal damit umgehen können.

Public Sub deletewirelessdevice() 
    Dim DelRng As Range 
    Dim ColOffset As Long 

    With ActiveWorkbook.Sheets("dt-attext") 
     ColOffset = Range("M" & 1).Column - 1 
     For Each cell In .Range("A2:A500") 
      If InStr(cell.Value2, "IP") Then 
       If DelRng Is Nothing Then 
        Set DelRng = Range(cell, cell.Offset(0, ColOffset)) 
       Else 
        Set DelRng = Union(DelRng, Range(cell, cell.Offset(0, ColOffset))) 
       End If 
      End If 
     Next cell 

     If Not DelRng Is Nothing Then DelRng.Delete Shift:=xlUp 
    End With 
End Sub 
+0

Ich habe Probleme, einen Teil des Codes zusammenzufügen, wenn ich versuche, einen Sinn daraus zu machen. Meistens nur wenn DelRng = Rnage (Zelle, Zelle.Offset (0, ColOffset)) runter. –