Clever-Excel-Forum

Normale Version: Automatisch neue Zeile einfügen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich versuche grade ein wenig mit VBA zu basteln (ich benutze Excel 2010) und bin da noch sehr neu. Ich habe bisher eine Userform mit einigen Textboxen (TB) und Comboboxen (CB) erstellt. Wenn ich etwas in die TB schreibe bzw in der CB auswähle und über einem Button "Speichern" bestätige, wird das automatisch ein meine Tabelle eingetragen. Gebe ich etwas erneut ein und speichere es, wird es in die nächste Zeile eingetragen. So weit so gut.

Nun zu meinem Problem:
Jedes mal, wenn ich auf Speichern drücke, soll eine neue Zeile mit der selben Formatierung (sprich Tabellen-Linien etc sollen übernommen werden) eingefügt werden. Das bedeutet meine Tabelle besteht sozusagen aus 2 Zeilen: In der 1. Zeile die "Überschriften" und in der zweiten Zeile die dazugehörigen Werte. Drücke in dann auf speichern besteht meine Tabelle aus 3 Zeilen (1. Zeile: Überschrift; 2+3 Zeile: Werte). Ist das möglich und wenn wie?
Ich bedanke mich schon mal recht herzlich für eure Hilfen!!

Grüße Jan
Hi Jan,

(02.11.2015, 11:20)Jan-Lan95 schrieb: [ -> ]Das bedeutet meine Tabelle besteht sozusagen aus 2 Zeilen: In der 1. Zeile die "Überschriften" und in der zweiten Zeile die dazugehörigen Werte. Drücke in dann auf speichern besteht meine Tabelle aus 3 Zeilen (1. Zeile: Überschrift; 2+3 Zeile: Werte). Ist das möglich und wenn wie?

Du kannst das Format der Zeile 2 dann auf die Zeile 3 kopieren/übertragen mit dem Formatpinsel.
Wenn Du das Vorgehen dazu aufzeichnest, hast Du ein kleines Makro und kannst den relevanten Schnipsel in Dein vorhandenes Makro ans Ende einfügen.

Also
  1. Makro-Aufzeichnung starten
  2. Zeile 2 markieren
  3. Formatpinsel anklicken
  4. Zeile 3 markieren und damit das Format übertragen
  5. Makro-Aufzeichnung beenden

Mit ALT-F11 den VBA-Editor aufrufen, dann den relevanten Teil aus dem aufgezeichneten Makro in Dein bestehendes einfügen und verallgemeinern, daß es immer auf die neue Zeile angewendet wird.

Du kannst das aufgezeichnete Makro auch hier vorstellen, dann können wir helfen, es zu entschlacken und zu verallgemeinern.
Danke erstmal für die schnelle Antwort. Das war meine erste Frage und bin positiv überrascht, dass das so schnell geht Thumps_up

Hier meine Makro:
Sub Zeile_automatisch_Einfügen()
'
' Zeile_automatisch_Einfügen Makro
'
'
    Range("A3:N3").Select
    Selection.Copy
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Gruß
Jan
Hi,

(02.11.2015, 11:49)Jan-Lan95 schrieb: [ -> ]Danke erstmal für die schnelle Antwort. Das war meine erste Frage und bin positiv überrascht, dass das so schnell geht Thumps_up

Hier meine Makro:

naja, wenn jemand grad Zeit hat und online ist, dann geht das schon schnell.

Versuche es mal so:
Code:
Sub Zeile_automatisch_Einfügen()
'
' Zeile_automatisch_Einfügen Makro
'
Dim loLetzteA As Long
'
    loLetzteA = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)   'letzte belegte Zeile in Spalte A (1)
   
   Range("A3:N3").Copy
   Range("A" & loLetzteA).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
   Application.CutCopyMode = False
End Sub

Wie Du siehst, habe ich die Selects entfernt und das Formatieren auf die letzte Zeile verallgemeinert. Das Makro fügt aber noch nichts in diese Zeile ein oder?
Hi,

(02.11.2015, 12:01)Rabe schrieb: [ -> ]Wie Du siehst, habe ich die Selects entfernt und das Formatieren auf die letzte Zeile verallgemeinert. Das Makro fügt aber noch nichts in diese Zeile ein oder?

Darum sollte das Makro besser so heißen:
Code:
Sub Zeile_automatisch_formatieren()
'
' Zeile_automatisch_formatieren Makro
'
Hi!
Nur ergänzend:
Wenn Du Deine Tabelle als "intelligente" Tabelle formatierst (Einfügen, Tabelle), dann kannst Du Dir die "Pinselei" sparen.
Dies erkennt Excel dann selbständig.
Selbst Formeln werden automatisch weitergeführt und angepasst.

Just my two cents,

Ralf
Hallo Ralf
wenn ich das richtig verstanden habe ist das eine möglichkeit mein Problem zu lösen ohne das ich codes schreiben muss?


Und Rabe:
Vielen Dank schonmal für den code. Habe ihn eingefügt und er macht im Prinzip das was ich wollte. Einen kleinen Fehler gibt es allerdings noch:
Wenn ich auf meinen Button "Speichern" klicke, kopiert er die Formatierung aus Zeile 3 in die Zeile 4 und fügt den Text in Zeile 4 ein. Er soll den Text aber erst in Zeile 3 einfügen und dann NUR die Formatierung (sprich ohne Text) kopieren und in Zeile 4 einsetzen. Ist das dann ein fehler der Reihenfolge was er wann zuerst macht?
Hier mal den Code was ich dies bzgl. gemacht habe:
Code:
Private Sub CommandButton1_Click()
Dim ZeileMax As Long
Dim Zeile As Long

With Tabelle1

ZeileMax = .UsedRange.Rows.Count
Zeile = ZeileMax + 1


.Range("A" & Zeile).Value = Me.TextBox1.Value
.Range("B" & Zeile).Value = Me.TextBox2.Value
.Range("C" & Zeile).Value = Me.TextBox3.Value
.Range("D" & Zeile).Value = Me.ComboBox3.Valu
.Range("E" & Zeile).Value = Me.TextBox4.Value
.Range("F" & Zeile).Value = Me.TextBox5.Value
.Range("H" & Zeile).Value = Me.ComboBox2.Value
.Range("I" & Zeile).Value = Me.ComboBox1.Value
End With



Dim loLetzteA As Long
'
   loLetzteA = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)   'letzte belegte Zeile in Spalte A (1)
   
   Range("A2:N2").Copy
   Range("A" & loLetzteA).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False

End Sub
Hi Jan!
Zitat: ohne das ich codes schreiben muss?
Nö, das nun nicht. :21:
Schließlich müssen ja die Werte des UserForm an die Tabelle übergeben werden.
Du sparst Dir "lediglich Formatierungen und Formelweiterführungen.
Außerdem erleichterst Du das evtl. Löschen von Zeilen.

By the way:
Nutze niemals dies: .UsedRange.Rows.Count
Der UsedRange arbeitet sehr unzuverlässig!
Nutze zum Feststellen der ersten freien Zeile die Variante, die Dir mein Namensvetter genannt hat.

Gruß Ralf
Hi Jan,

(02.11.2015, 13:06)Jan-Lan95 schrieb: [ -> ]wenn ich das richtig verstanden habe ist das eine möglichkeit mein Problem zu lösen ohne das ich codes schreiben muss?
[...]
Vielen Dank schonmal für den code.
Einen kleinen Fehler gibt es allerdings noch:

Naja, programmieren mußt Du schon noch, aber Du kannst Dir mit dieser Methode das grundsätzliche Gerüst für ein Makro erstellen, das angepasst und erweitert werden kann/muß. Das mache ich immer für Aufgaben, für die mir der Code nicht mehr einfällt.

Von Deinem Code her müßte er zuerst einfügen und dann formatieren. Code wird immer von oben nach unten abgearbeitet, es sei denn Du hast Sprungmarken drin, aber das ist schlechter Programmier-Stil.
loLetzteA benötigst Du eigentlich gar nicht, Du hast ja schon die letzte Zeile in der Variablen "Zeile":

Code:
Option Explicit

Private Sub CommandButton1_Click()
  Dim ZeileMax As Long
  Dim Zeile As Long
 
  With Tabelle1
     ZeileMax = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)   'letzte belegte Zeile in Spalte A (1)
     Zeile = ZeileMax + 1
     
     .Range("A" & Zeile).Value = Me.TextBox1.Value
     .Range("B" & Zeile).Value = Me.TextBox2.Value
     .Range("C" & Zeile).Value = Me.TextBox3.Value
     .Range("D" & Zeile).Value = Me.ComboBox3.Value
     .Range("E" & Zeile).Value = Me.TextBox4.Value
     .Range("F" & Zeile).Value = Me.TextBox5.Value
     .Range("H" & Zeile).Value = Me.ComboBox2.Value
     .Range("I" & Zeile).Value = Me.ComboBox1.Value
     
     .Range("A2:N2").Copy
     .Range("A" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
  End With
 
End Sub
Vielen Dank an beide Ralfs ;)
Ihr habt mir sehr geholfen!

Wenn ich jetzt z.B. noch zusätzlich meine Formeln kopieren möchte, muss ich dann nur den Befehl:

Code:
.Range("A" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
xlPasteFormats ändern oder muss man dann noch zusätlich was schreiben?
(Sorry wenn meine gewählten Begriffe nicht der Excelsprache entsprechen)

Gruß
Jan
Seiten: 1 2