flashdrive
Goto Top

Excel automatisch neue Zeile einfügen

Hallo zusammen bin seit 2 Tagen auf der Suche aber habe nur weit aus komplizierteres gefunden

Ich suche nach einer Möglichkeit in meiner Tabelle automatisch eine Zeile einfügen zu lassen sobald in Spalte D ein Zahlenwert steht.
Die neue Zeile soll direkt unter der Zeile mit dem Zahlenwert stehen (wenn möglich soll der Cursor auch gleich in diese neue Zeile springen auf Spalte A)

An das Ende der Tabelle habe ich schon geschafft mein Problem ist nur das es eine Vorlage werden soll die aus 5 Blöcken besteht die je nach Bedarf gefüllt werden sollen,
sprich da wo ausgefüllt wird soll automatisch eine neue Zeile darunter entstehen.

Sollte für die VB Profis eigentlich kein Problem sein oder?
Ich hoffe ihr könnt mir helfen.

Schönen Abend noch und danke im vorraus

Content-ID: 167374

Url: https://administrator.de/contentid/167374

Ausgedruckt am: 16.11.2024 um 01:11 Uhr

MrTrebron
MrTrebron 02.06.2011 um 11:40:08 Uhr
Goto Top
Hi Flasdrive

dann stell doch mal ein was du schon hast, dann kann man das erweitern.
Denke das kaum jemand am Feiertag lust hat dir die Arbeit komplett abzunehmen.

Ebenfalls kein Gruß
Norbert
76109
76109 02.06.2011 um 13:04:10 Uhr
Goto Top
Hallo FlAsHdRiVe!

Versuchs mal hiermit (Quellcode in das entsprechende Tabellenblatt einfügen):
Private Const ColChange = 4     'Spalte Eingabe (D)  
Private Const ColSelect = 1     'Spalte Cursor (A)  

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NextLine As Long
    
    With Target
        If .Count <> 1 Or .Column <> ColChange Then Exit Sub
        
        If IsNumeric(.Value) Then
            NextLine = .Row + 1
            If WorksheetFunction.CountA(Cells(NextLine, 1).Resize(1, Columns.Count)) Then
                Rows(NextLine).Insert Shift:=xlDown
                Cells(NextLine, ColSelect).Select
            Else
                Cells(NextLine, ColSelect).Select
            End If
        End If
    End With
End Sub

Wobei nur eine neue Zeile eingefügt wird, wenn die nächste Zeile Werte enthält. In der Leerzeile wird die Zelle in Spalte A (ColSelect) selektiert.

Gruß Dieter
bastla
bastla 02.06.2011 um 14:58:58 Uhr
Goto Top
Hallo Dieter!

Nur als Anregung: Wenn mit der Spaltenangabe nicht gerechnet / verglichen werden muss (wie bei "ColSelect"), kannst Du auch die Spaltenbenennung verwenden:
Private Const ColSelect = "A"
Grüße
bastla
76109
76109 02.06.2011 um 16:32:17 Uhr
Goto Top
Hallo bastla!

Zitat von @bastla:
Nur als Anregung: Wenn mit der Spaltenangabe nicht gerechnet / verglichen werden muss (wie bei "ColSelect"), kannst Du
auch die Spaltenbenennung verwenden:
Da hast Du Recht, aber zwecks Einheitlichkeit (Spalte D benötigt eine Zahl) habe ich mich dazu durchgerungen, für Spalte A auch eine Zahl zu nehmen und hoffe Du verzeihst mir dasface-wink

Noch einen schönen Feiertag!

Gruß Dieter
bastla
bastla 02.06.2011 um 19:01:28 Uhr
Goto Top
Hallo Dieter!
hoffe Du verzeihst mir dasface-wink
Ausnahmsweise face-wink

Grüße
bastla
FlAsHdRiVe
FlAsHdRiVe 05.06.2011 um 18:26:18 Uhr
Goto Top
Zitat von @MrTrebron:
Hi Flasdrive

dann stell doch mal ein was du schon hast, dann kann man das erweitern.
Denke das kaum jemand am Feiertag lust hat dir die Arbeit komplett abzunehmen.

Ebenfalls kein Gruß
Norbert

"Schönen Abend noch" ist für mich schon nen Gruß face-wink

Und sorry das ich mich erst jetzt melde aber die Benachrichtigungs mails wurden vom emailserver zurückgewiesen.... face-sad

Werde den Vorschlag von Didi gleich mal testen....und berichten

schönen Gruß und einen schönen Abend noch
FlAsHdRiVe
FlAsHdRiVe 05.06.2011 um 18:47:48 Uhr
Goto Top
Zitat von @76109:
Hallo FlAsHdRiVe!

Versuchs mal hiermit (Quellcode in das entsprechende Tabellenblatt einfügen):
> Private Const ColChange = 4     'Spalte Eingabe (D)  
> Private Const ColSelect = 1     'Spalte Cursor (A)  
> 
> Private Sub Worksheet_Change(ByVal Target As Range)
>     Dim NextLine As Long
>     
>     With Target
>         If .Count <> 1 Or .Column <> ColChange Then Exit Sub
>         
>         If IsNumeric(.Value) Then
>             NextLine = .Row + 1
>             If WorksheetFunction.CountA(Cells(NextLine, 1).Resize(1, Columns.Count)) Then
>                 Rows(NextLine).Insert Shift:=xlDown
>                 Cells(NextLine, ColSelect).Select
>             Else
>                 Cells(NextLine, ColSelect).Select
>             End If
>         End If
>     End With
> End Sub
> 

Wobei nur eine neue Zeile eingefügt wird, wenn die nächste Zeile Werte enthält. In der Leerzeile wird die Zelle in
Spalte A (ColSelect) selektiert.

Gruß Dieter

Super vielen Dank schon mal genau was ich gesucht habe.
Wie würde der Code aussehen wenn ich nur eine neue Zeile haben möchte wenn in Spalte E die Eingabetaste gedrückt wird? In dieser wird nicht gerechnet oder verglichen!
Aber deine lösung ist schon fast Perfekt für meinen Bedarf face-wink

Gruß
Leif

Update: Ich glaube die beste Lösung für mein Problem wäre das sobald in Spalte E die "Eingabetaste" gedrückt wird sich darunter eine neue Zeile einfügt.
Weil mit der obigen Lösung meine Summenfunktion nicht erweitert wird.

LG
FlAsHdRiVe
FlAsHdRiVe 07.06.2011 um 21:22:17 Uhr
Goto Top
Keiner mehr nen Tip oder nen Code ?
Komme einfach nicht mehr weiter....

MfG
MarkusMarkus
MarkusMarkus 05.07.2013 um 22:20:46 Uhr
Goto Top
Ich möchte ein Fragebogen erstellen und damit dieser nicht gleich so bombastisch aussieht kannst du mir bestimmt weiterhelfen.
Wie formuliere ich den Quellcode, wenn statt Zahlen einfach nur ein Inhalt stehen muss um automatisch eine Zeile zu öffnen.

Ich bedanke mich schon mal im Vorraus bei Dir!!!
bastla
bastla 05.07.2013 um 22:29:44 Uhr
Goto Top
Hallo MarkusMarkus und willkommen im Forum (ja, wir mögen hier Begrüßungen)!

Wenn ich Dich richtig verstehe, versuch es mit folgender Zeile 10:
        If Not IsEmpty(.Value) Then
Grüße
bastla
MarkusMarkus
MarkusMarkus 05.07.2013 um 22:46:22 Uhr
Goto Top
Leider nicht. Es soll z.B. eine dritte Zeile automatisch eingefügt werden, wenn die zweite Zeile einen Inhalt besitzt.


Zeile 1: Welche Tiere gibt es dort? [Enter]
Zeile 2: Antwort

und wenn ich jetzt [Enter] drücke wird die dritte Zeile eingefügt und Zeile 5,6,7... werden runtergesetzt.

Trotzdem Rekord in Antworten!!!!
Danke
76109
76109 06.07.2013 aktualisiert um 14:10:29 Uhr
Goto Top
Hallo MarkusMarkus!

Das funktioniert so nicht, da der Code ja nur auf eine Änderung (Change) des Zellinhalts reagiert, also wenn Du in der betreffenden Zelle etwas eingibst und mit Enter bestätigst.

Eine aus meiner Sicht vertretbare Lösung wäre:
Du erstellst eine Tabelle mit den Fragen durch Leerzeilen getrennt.

Danach wird bei einem Doppelklick auf eine Frage (muss als Indikator ein Fragezeichen beinhalten), eine InputBox zur Beantwortung der Frage ausgegeben und entsprechend des Inhalts (Leer, Abbruch oder Text) eine neue Zeile unterhalb der Frage eingefügt oder auch nicht...

Die standardmäßige Doppelklick-Funktion (direktes editieren einer Zelle) ist dabei außer Kraft gesetzt...

Code in das Tabellenblatt einfügen:
Option Explicit

Private Const ColSelect = 1     'Spalte A  

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, ByRef Cancel As Boolean)
    Dim strAntwort As String, rngNext As Range
    
    With Target
        If .Column = ColSelect And InStr(.Text, "?") > 0 Then  
            strAntwort = Replace(InputBox(.Text, "Frage beantworten..."), "?", "")  
            
            If strAntwort <> "" Then  
                Set rngNext = .Offset(1, 0)
                Do Until rngNext.Text = ""  
                    Set rngNext = rngNext.Offset(1, 0)
                Loop
                
                rngNext.Value = strAntwort
                Rows(rngNext.Row + 1).Insert Shift:=xlDown
            End If
        End If
    End With
    Cancel = True
End Sub

Gruß Dieter