Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeile einfügen wenn aktive Zelle in Spalte A verlassen wird
#1
Hallo,

ich bräuchte Hilfe bei einem Excel VBA Problem, wo ich nicht weiter komme.
Dazu muss ich sagen, dass ich was VBA angeht Anfänger bin und mir einige Sachen ergoogelt und zusammengefügt  habe  :30: . Daher kann kommt euch der Code vielleicht ein wenig wirr vor.



Die Tabelle sieht in etwa wie folgt aus

                   A          B         C
       1        Nr.      Bla       Bla
       2       123      Text    Text
       3       213      Text    Text
       4 
       5
       6       Nr.      Bla       Bla
       7      321      Text    Text      
       8        
       9        Nr.      Bla       Bla
      10


Mit  dem unten stehendem Makro möchte ich bewirken, dass wenn ich in Spalte A in Zeile 3 eine neue Nummer eintrage, automatisch eine neue Zeile unterhalb der neu eingetragenen Nummer eingefügt wird. 
Oder wenn ich in Zeile 7 eine neue Nummer eintrage, dass sich dort ebenfalls unterhalb automatisch eine neue Zeile einfügt.
Wenn jetzt aber schon mehrere Nummern schon vorhanden sind (siehe Zeile 2) und ich eine Veränderung an der Nummer vornehme, soll keine Zeile eingefügt werden.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
   If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
     
       
       Dim i As Long
 
        For i = Cells(Columns.Count, "A").End(xlUp).Row To 1 Step -1
          If ((Cells(i, "A") <> "") And (Cells(i + 1, "A") = "")) Then
        ActiveCell.EntireRow.Insert Shift:=xlShiftDown
          End If         
         
Next
 
   
'   MsgBox "Makro gestartet!"
   
End Sub

Soweit fügt das Makro die Zeile ein. Nur leider werden gleich mehrere Zeilen eingefügt und wenn man bei Zeile 2 die Nummer ändert, werden dazwischen ebenfalls Zeilen eingefügt.

Die Datei habe ich auch mal mit angehangen.

Ich hoffe ihr könnt mir helfen ^^ 


Vg
Gimpi


Angehängte Dateien
.xls   Zeilen einfügen.xls (Größe: 45 KB / Downloads: 3)
Antworten Top
#2
Hallo Gimpi.

Das mit den mehreren Zellen, die eingefügt werden, kann ich Dir erklären.
Du hast ja eine gute Abfrage drin, die prüft ob eine Zelle einen Inhalt hat, und die danach keinen Inhalt hat. Nur dann willst Du eine neue Zeile einfügen.
Soweit sogut. Nur fügst Du die Zeile nicht an der Stelle ein, die Du untersucht hast, sondern immer bei ActiveCell, also der momentan aktiven Zelle. Setze die Zeile in die eingefügt werden soll einfach in Abhängigkeit von Deinem Zähler i.

Um nicht immer Zeilen einzufügen, könntet Du prüfen, ob zwischen den Blöcken die gewünschte Anzahl leerer Zeilen vorhanden ist, und nur dann eine neue Zeile einfügen, wenn das nicht der Fall ist. Oder Du prüfst, ob der alte Zelleninhalt einen Wert hatte, oder nicht.

Gruß
Sebastian
[-] Folgende(r) 1 Nutzer sagt Danke an Bast4i für diesen Beitrag:
  • Gimpi
Antworten Top
#3
Hallo Sebastian,

erst einmal danke das du drüber geschaut hast. 

Wenn ich dich richtig verstanden habe, soll ich 


Code:
Cells(i + 1, "A").EntireRow.Insert Shift:=xlShiftDown

                 
anstatt 

Code:
Cells(ActiveCell.Row, "A").EntireRow.Insert Shift:=xlShiftDown

schreiben, um eine Abhängigkeit in die Zelle von meinem Zähler i zu bekommen.
Das hatte ich schon gemacht. Nur leider wird immer dann eine Zeile eingefügt, wo die Prüfung, ob eine Zelle einen Inhalt hat, und die danach keinen Inhalt hat, wahr ist. 

Deshalb hatte ich den Code, mit der ActiveCell so umgeschrieben.

Grüße Gimpi
Antworten Top
#4
Hallo Gimpi,

so sollte es klappen:
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim varTemp As Variant
 If Target.Cells.Count = 1 And Target.Column = 1 Then
   If Len(Target.Value) Then
     On Error Resume Next
     Application.EnableEvents = False
     varTemp = Target.Value
     Application.Undo
     If Len(Target.Value) = 0 Then
       Target.Offset(1).EntireRow.Insert
     End If
     Target.Value = varTemp
     Application.EnableEvents = True
     On Error GoTo 0
   End If
 End If
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Gimpi
Antworten Top
#5
Hallo Uwe,

danke für deine wahrscheinlich elegantere Lösung meines Problems   :19: 

Gruß 
Gimpi
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste