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-Key: 167374

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: MrTrebron
MrTrebron Jun 02, 2011 at 09:40:08 (UTC)
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
Mitglied: 76109
76109 Jun 02, 2011 at 11:04:10 (UTC)
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
Member: bastla
bastla Jun 02, 2011 at 12:58:58 (UTC)
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
Mitglied: 76109
76109 Jun 02, 2011 at 14:32:17 (UTC)
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
Member: bastla
bastla Jun 02, 2011 at 17:01:28 (UTC)
Goto Top
Hallo Dieter!
hoffe Du verzeihst mir dasface-wink
Ausnahmsweise face-wink

Grüße
bastla
Member: FlAsHdRiVe
FlAsHdRiVe Jun 05, 2011 at 16:26:18 (UTC)
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
Member: FlAsHdRiVe
FlAsHdRiVe Jun 05, 2011 at 16:47:48 (UTC)
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
Member: FlAsHdRiVe
FlAsHdRiVe Jun 07, 2011 at 19:22:17 (UTC)
Goto Top
Keiner mehr nen Tip oder nen Code ?
Komme einfach nicht mehr weiter....

MfG
Member: MarkusMarkus
MarkusMarkus Jul 05, 2013 at 20:20:46 (UTC)
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!!!
Member: bastla
bastla Jul 05, 2013 at 20:29:44 (UTC)
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
Member: MarkusMarkus
MarkusMarkus Jul 05, 2013 at 20:46:22 (UTC)
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
Mitglied: 76109
76109 Jul 06, 2013 updated at 12:10:29 (UTC)
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