Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen über Inputbox einfügen (variabel) | Herbers Excel-Forum

Forumthread: Zeilen über Inputbox einfügen (variabel)

Zeilen über Inputbox einfügen (variabel)
24.01.2010 14:47:22
Ewald Sadowski

Hallo
habe ein Makro um Zeilen über Inputboxen einfügen zu können.
Zuerst wird abgefragt, ab wo eingefügt werden soll, und dann wieviel Zeilen eingefügt werden sollen.
Das Makro läuft durch, es kommt keine Fehlermeldung aber es passiert auch nichts.
Was ist da falsch??
Makro:


Sub Makro3()
' Makro3 Makro
' Tastenkombination: Strg+z
Dim intAnz As Integer
Worksheets("Tabelle1").Select
Dim myRange As Range
On Error Resume Next
Set myRange = Application.InputBox(Prompt:="Bitte wählen Sie die Zeile ab wo eingefügt wird" _
_
_
, _
Title:="Zeilenauswahl", Type:=8)
intAnz = Application.InputBox _
("Wieviel Zeilen sollen eingefügt werden?", Title:="Zeilenanzahl")
Rows(myRange + intAnz).Select
Selection.Insert Shift:=xlDown
Range(myRange).Select
Selection.AutoFill Destination:= _
Range(myRange + intAnz), Type:=xlFillDefault
End Sub

Gruß Ewald

Anzeige

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen über Inputbox einfügen (variabel)
24.01.2010 15:13:19
Hajo_Zi
Hallo Ewald,
versuche es so
Option Explicit
Sub Makro3()
' Makro3 Makro
' Tastenkombination: Strg+z
Dim intAnz As Long
Dim myRange As Range
Worksheets("Tabelle1").Select
On Error Resume Next
Set myRange = Application.InputBox(Prompt:="Bitte wählen Sie die Zeile ab wo eingefügt  _
wird", _
Title:="Zeilenauswahl", Type:=8)
intAnz = Application.InputBox _
("Wieviel Zeilen sollen eingefügt werden?", Title:="Zeilenanzahl")
Rows(myRange.Rows + intAnz).Insert Shift:=xlDown
Range(myRange.Address).AutoFill Destination:= _
Range(myRange + intAnz), Type:=xlFillDefault
On Error GoTo 0
End Sub


Anzeige
AW: ON ERROR RESUME NEXT
24.01.2010 15:19:00
Daniel
Hi
die Fehlermeldung bleibt aus, weil du sie unterdrückst!
das ON ERROR RESUME NEXT sorgt dafür, daß das Makro bei einem Fehler einfach mit dem nächsten Befehl weiter macht, unabhängig davon, ob das sinnvoll ist oder nicht.
nimm das erstmal raus und arbeite dich durch die Fehler durch, vielleicht wird dir dann klarer, wie das Makro funktionieren muss, weil da geht schon so einiges durcheinander.
Gruß, Daniel
Anzeige
AW: ON ERROR RESUME NEXT
24.01.2010 15:47:49
Ewald Sadowski
Hallo Hajo, Daniel,
habe deinen Code mal probiert, funktioniert aber leider auch nicht.
habe dann die Fehlerünterdrückung rausgenömmen (von Daniel)
und bekomme bei diesen zwei Zeilen Laufzeitfehler
'Rows(myRange.Rows + intAnz).Insert Shift:=xlDown
Range(myRange.Address).AutoFill Destination:=Range(myRange + intAnz), Type:=xlFillDefault
und zwar Laufzeitfehler 13 Typen unverträglich
komme aber nicht drauf, was da falsch ist
Anzeige
AW: ON ERROR RESUME NEXT
24.01.2010 16:16:13
Hajo_Zi
Hallo Ewald,
Rows(myRange.Rows + intAnz).Insert Shift:=xlDown
Range(myRange.Address).AutoFill Destination:=Range(myRange.rows + intAnz), Type:=xlFillDefault
Gruß Hajo
AW: Hajo, teste doch mal
24.01.2010 16:29:04
Daniel
deine Vorschläge, bevor du sie hier hochlädst.
das was du da vorschlägst macht doch keinen Sinn und ist deiner eigentlich nicht würdig.
Gruß, Daniel
Anzeige
...so...?! ;-) owT
24.01.2010 16:40:10
Luc:-?
:-?
AW: ...so...?! ;-) owT
24.01.2010 17:08:01
Daniel
Rangeobjekt + IntegerVariable = Unsinn
oder irre ich da ?
Nee, du NICHT! Das...
24.01.2010 17:11:59
Luc:-?
...So bezog sich auf was Anderes... ;-)
Gruß Luc :-?
Anzeige
AW: uff, ich dachte schon...
24.01.2010 18:11:17
Daniel
AW: ON ERROR RESUME NEXT
24.01.2010 16:20:43
Daniel
Hi
probier das Makro mal so:
Sub Makro3()
' Makro3 Makro
' Tastenkombination: Strg+z
Dim intAnz As Integer
Worksheets("F").Select
Dim myRange As Range
On Error Resume Next
Set myRange = Application.InputBox( _
Prompt:="Bitte wählen Sie die Zeile ab wo eingefügt wird", _
Title:="Zeilenauswahl", _
Type:=8)
On Error GoTo 0
If Not myRange Is Nothing Then
intAnz = Application.InputBox( _
Prompt:="Wieviel Zeilen sollen eingefügt werden?", _
Title:="Zeilenanzahl", _
Type:=1)
If intAnz > 0 Then
Rows(myRange.Row + 1).Resize(intAnz).Insert Shift:=xlDown
Rows(myRange.Row).AutoFill Destination:=Rows(myRange).Resize(intAnz + 1), _
Type:=xlFillDefault
End If
End If
End Sub
die Zeilen werden unter der Markierten Zeile eingefügt und nach unten ausgefüllt.
Fehler sollten eigentlich nicht mehr passieren, da diese durch die Typfestlegung in der Inputbox abgefangen werden.
Hier siehst du auch , wie man On Error Resume Next sinnvoll einsetzen kann, denn an dieser Stelle würde der Code einen Fehler bringen, wenn der Anwender auf abbrechen klickt.
trotzdem muss dieser Fall durch eine geeignete IF-Abfrage abefangen werden.
Ebenso bei der 2. Input-box.
Hier gibt es allerdings keinen Fehler, wenn abgebrochen wird.
der 2. Teil des Makros sollte dann nur ausgeführt werden, wenn alle Eingaben korrekt gemacht wurden.
Somit ist On Error Resume Next hier nicht notwendig.
Gruß, Daniel
Anzeige
AW: ON ERROR RESUME NEXT
24.01.2010 21:29:52
Ewald Sadowski
Hallo Daniel
erstmal ein Danke für deine Hilfe
habe deinen Code jetzt mal getestet das funktioniert auch soweit.
Nur etwas ist seltsam. Beim ersten Mal lief alles durch, keine Fehlermeldung, Zeilen werden eingefügt.
Bei weiteren Versuchen werden zwar auch die Zeilen eingefügt aber ich bekomme eine Fehlermeldung
Laufzeitfehler 1004 "Die Autofill-Methode des Range-Objektes konnte nicht ausgeführt werden"
und markiert ist:
Rows(myRange.Row).AutoFill Destination:=Rows(myRange).Resize(intAnz + 1), _
Type:=xlFillDefault
Konnte aber keinen Fehler finden.
Gruß Ewald
Anzeige
AW: ON ERROR RESUME NEXT
24.01.2010 23:15:40
Daniel
Hi
ok hab was vergessen.
änder die Zeile mal so ab:
Rows(myRange.Row).AutoFill Destination:=Rows(myRange.Row).Resize(intAnz + 1), _
Type:=xlFillDefault
Gruß, Daniel
AW: ON ERROR RESUME NEXT
25.01.2010 18:41:16
Ewald Sadowski
Hallo Daniel
das funktioniert jetzt, doch bekomme ich keine leeren Zeilen, sondern es wird der Wert um 1 erhöht
Beispiel: Wenn in A10 der Wert 5 steht, und füge ab da zwei Zeilen ein, so haben die Zellen dann den Wert 6/7.
Das sollte eigentlich nicht sein.
Gruß Ewald
Anzeige
AW: Wenn du leere Zeilen willst
26.01.2010 00:32:00
Daniel
warum hast du dann die Zeile mit dem Filldown reingenommen?
die ist ein deinem Makro doch drinnen, daher bin ich davon ausgegangen, daß du das so haben willst.
wenns dich stört, lösch die Zeile mit dem Filldown wieder raus.
Gruß, Daniel
Das kommt, wenn man irgendwelche...
26.01.2010 00:56:36
Luc:-?
...irgendwie sinnvoll erscheinenden Makros ohne sie wirklich zu verstehen einfach übernimmt und sie dann womöglich durch eigene, ahnungslose Zutaten noch verschlimmbessert. Das ist ungefähr so, als ob ich die Straße fegen will, habe aber keinen Besen, sondern zufällig gerade 'ne Harke bei der Hand...
Da kann ein echter Profi eigentlich nur noch den Kopf schütteln. Jemand, der so etwas tut, muss (in seiner Firma) erst mal ordentlich Schaden angerichtet haben bis er einsieht, dass es so nicht gehen kann. Bis es soweit ist, darf er weiter Forumshelfer zu verwirren oder gar zu verärgern suchen...
Ist das nicht auch deine Meinung zu diesem Thread, Daniel... ;-)
Mancher scheint wirklich gern auf 'nem Vulkan zu tanzen...
Gruß Luc :-?
Anzeige
Forumshelfer nur "... echter Profi ..."
26.01.2010 10:20:52
Tino
Hallo Luc,
wer darf den demnach noch ein Forumshelfer sein, nur ein "... echter Profi ..."?
Mist dann muss ich mich ja auch abmelden und viele andere auch ;-).
Dann wird es aber dünn hier!
Gruß Tino
AW: Forumshelfer nur "... echter Profi ..."
26.01.2010 10:25:58
Hajo_Zi
Hallo Tino,
da muss sich Luc dann aber auch abmelden. Ich habe erst vor kurzem ein Makro von ihm gesehen wo Zeilen gelscht wurden. Der User der sich mit Programmen auskennt , kennt den Sachverhalt das man dies am leichtesten von hinten nach vorne macht um keine Zeilen zu überspringen, nur Luc nicht.
Gruß Hajo
Anzeige
;-) oT.
26.01.2010 10:33:45
Tino
Schön, dass du auch mal was selber weißt,...
26.01.2010 11:00:14
Luc:-?
...Hajo,
ich löse Probleme, wenn ich sie selber habe, auch selber. Außerdem ist's schietegal wie herum, Hptsache ist doch das es fkt. Ich hatte da nicht vor, all zuviel Mühe zu investieren, noch dazu von einem Linux-PC aus. Dein wenig profihafter Ausrutscher neulich mit der Addition von Zahlen auf ein Objekt war ja nun wahrlich auch kein Ruhmesblatt... :->
Außerdem biete ich keine halbfertigen und unausgegorenen Codes an wie du bspw mit dem alten Versuch von bst zur Ermittlung der aktuellen (bedingten) Formatierung (mitsamt aller Testkommentare!)... Bernd würde das höchstwahrscheinlich nicht tun!
Außerdem habe ich nie behauptet, ein „echter“ Profi zu sein. Von denen hört man nämlich solche Sprüche wie man sollte nicht alles machen, was möglich ist (O-Ton eines Systemprogrammierers und interessanterweise auch unseres Fahrradhändlers und -reparateurs!)... ;-)
Wenn das auch ein Profikennzeichen ist, bin nicht nur ich keiner, sondern viele Helfer und einige, von denen es keiner vermutet, sind dann viell die wahren Profis... ;-)
Gruß Luc :-?
Anzeige
Ach Gott, dass ist ja sogar der bewusste Thread!
26.01.2010 13:05:16
Luc:-?
Na, Hallelujah, ganz schön mutig! Respekt, Hajo,
soviel „Kühnheit“ hatte ich dir gar nicht zugetraut... :->
Luc :-?
AW: ich gehe eigentlich davon aus, daß hier im
26.01.2010 21:39:41
Daniel
Forum überhaupt kein echter Profi aktiv ist.
Denn warum sollte er anderen Menschen kostenlos was überlassen, womit er sonst tagtäglich sein Geld verdient?
Tagsüber für xxx Euro Excelkurse geben und abends dann umsont das Wissen raushauen, macht irgendwie keinen Sinn.
Gruß, Daniel
Anzeige
AW: ich gehe eigentlich davon aus, daß hier im
27.01.2010 07:18:16
Hajo_Zi
Hallo Daniel,
in diesem Forum mag das zutreffen. Aber in einem anderem Forum kenne ich jemanden der mit Schulungen sein Geld verdient und Sie Antwortet auch. Also würde ich das nicht so Grundsätzlich sehen.
Gruß Hajo
Anzeige
Wieso Helfer? Das bezog sich doch eindeutig...
26.01.2010 11:04:38
Luc:-?
...auf den irgendwelchen Code sammelnden und adaptierenden Fragesteller, Tino...???!
Gruß Luc :-?
ich hab das so in den Hals bekommen.
26.01.2010 11:36:12
Tino
Hallo,
das jeder der einen Code kopiert der nicht sein eigen ist,
wie ich heute einen von Erich G. nicht teilnehmen dürfte, eben nur die "echten Profis".
Gruß Tino
Anzeige
Du wirst doch wohl wissen, was du kopierst,...
26.01.2010 12:33:28
Luc:-?
...was das macht und ob das auf das jeweilige Problem passt, Tino,
also 'n Besen ist und keine Harke... ;-)
Also musstest du dich nicht angesprochen fühlen. Wie oft liest man hier und anderswo aber... Ich habe den-und-den Code im Web/Forum „gefunden“, habe den anzupassen versucht und bin gescheitert... Profi-Pgmierer schütteln da wohl wirklich den Kopf! Schön, wenn wenigstens kein Schaden entstanden ist → 3x darfst du raten, warum WF so ein VBA-Gegner ist... ;-)
Übrigens hat Hajo, den Sachverhalt verkürzt und z.T. sogar falsch dargestellt wie du gern hier nachlesen kannst, wenn du das nicht kennen solltest...
Gruß Luc :-?
Anzeige
AW: Wenn du leere Zeilen willst
26.01.2010 12:09:34
Ewald Sadowski
Hallo Daniel
habe jetzt die Zeile auskommentiert und dann geht es.
Was ich nur nicht verstehe, in dem ersten Makro mit der festen Zeilenvorgabe ist die Autofill-Anweisung auch drin, doch da werden die Werte nicht eingetragen.
Nochmal Danke für deine Hilfe
Gruß Ewald
PS. Entschuldigung! Eigentlich hatte ich nur um Hilfe gebeten, wollte keine Diskussion über die Helfer entfachen, Es scheint einer benutzt das Forum hier als Egopflege und will gar nicht helfen.
Anzeige
Nichts verstanden? Dann nochmal...
26.01.2010 13:13:07
Luc:-?
...Es kann sehr gefährlich wdn, einen Pgmcode zu verwenden, den man nicht versteht. Das Risiko wäre mir zu hoch. Wenn deiner Firma dadurch Schaden entsteht, wird sie dich regresspflichtig machen! Also stets nur das anwenden, was du auch verstehst! Man kann es sich hier ja auch erklären lassen. Die meisten Helfer tuen das, wenn man sie darum bittet und die Selbsteinschätzung (Level) nicht zu hoch angesetzt war.
Luc :-?
Anzeige
AW: Wenn du leere Zeilen willst
26.01.2010 21:46:17
Daniel
Hi
das erste Makro kenne ich nicht und die Autofill-Funktion verwende ich normalerweise auch nicht, da ich es nicht Excel überlassen will, ob ich jetzt Werte kopiere oder Reihen fortsetze.
Das entscheidet Excel hand der Daten, die in dem Benannten Zellbereich bereits vorhanden sind.
Allerdings ist mir die Logik dahinter nicht ganz klar, deswegen verwende ich diese Funktion nicht.
Gruß, Daniel
Anzeige
Was soll das denn bringen,...
24.01.2010 15:44:08
Luc:-?
...Ewald,...
Du verwendest ja offensichtlich die InputBox-Methode. Da kann man das so machen. Aber gibt der Nutzer das dann auch so ein wie erforderlich? Im VBE-Hilfe-Bsp wird ein Bereichsname verwendet, aber der Nutzer wird hier doch wohl eher nur eine (Zeilen-)Nr eintragen! Ich weiß nicht, ob das dann reicht, um ein Range-Objekt zu setzen. Mit einer 2.InputBox(-Methode) fragst du dann höchst nutzerunfreundlich noch die Zeilenanzahl ab. Dabei hast du wohl übersehen, dass in der Hilfe steht, ohne Type gibt die Methode Text zurück. Ich weiß ja nicht, ob hier die automatische Umwandlung in einen Integer-Wert (Long wäre sinnvoller!) fktt. Wenn das aber doch alles fktn sollte, kommt der „dicke Hund“ anschließend. Da wird erst eine Zeile „ausgewählt“, deren Nummer sich aus der Addition eines Objekts (!) und einer Zahl ergeben soll! Dann wird die Einfügezeile ausgewählt (vorausgesetzt Set hat geklappt!) und soll auf den angeblichen Einfügebereich, der ebenfalls durch Addition von Objekt und Zahl bestimmt wdn soll, übertragen wdn...! So steht das nicht in den VBE-Hilfe-Bspp! Falls das aber wider Erwarten doch fktn sollte, siehst du evtl deshalb nichts, weil du eine leere Zeile auf leere Zeilen überträgst...!?
Übrigens kann keine Fehlermeldung kommen, denn du hast am Anfang On Error Resume Next geschrieben. Das unterdrückt sie. So etwas ist meist nur bei udFktt sinnvoll. Bei Subroutinen sollte man dann schon eher eine ordentliche Fehlerbehandlung pgmieren (On Error GoTo...). Und die PgmSyntax scheint formal i.O. zu sein, so dass sich auch der Compiler nicht meldet...
Gruß Luc :-?
Anzeige
AW: Was soll das denn bringen,...
24.01.2010 15:59:57
Ewald Sadowski
Hallo Luc
mein Makro ist von diesem Makro abgeleitet:
Sub Makro1()
' Makro1 Makro
' Tastenkombination: Strg+
Dim intAnz As Integer
Worksheets("Tabelle1").Select
intAnz = Application.InputBox _
("Wieviel Zeilen sollen eingefügt werden?")
Rows("11:" & 10 + intAnz).Select
Selection.Insert Shift:=xlDown
Range("D10").Select
Selection.AutoFill Destination:= _
Range("D10 : D" & 10 + intAnz), Type:=xlFillDefault
End Sub
Dieses Makro funktioniert, doch leider ist hier ab wo die Zeilen eingefügt werden sollen festvorgegeben.
Dies will ich aber variabel haben, um die Zeilen nicht immer an der gleichen Stelle einzufügen.
Gruß Ewald
Anzeige
Das sieht ja auch ganz anders aus!
24.01.2010 16:39:02
Luc:-?
Beachte meine Hinweise, Ewald,
von wg der Addition! Inzwischen hast du ja die entsprechd Fehlermeldungen erhalten, so, wie ich es erwartet habe...!
Gruß Luc :-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Zeilen über Inputbox in Excel einfügen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools, falls sie nicht sichtbar sind.
  2. Erstelle ein neues Makro:
    • Gehe zu Entwicklertools > Visual Basic.
    • Füge ein neues Modul hinzu.
  3. Kopiere den folgenden Code in das Modul:
Sub ZeilenEinfügen()
    Dim intAnz As Long
    Dim myRange As Range
    On Error Resume Next
    Set myRange = Application.InputBox(Prompt:="Bitte wählen Sie die Zeile ab wo eingefügt wird", Title:="Zeilenauswahl", Type:=8)
    On Error GoTo 0
    If Not myRange Is Nothing Then
        intAnz = Application.InputBox(Prompt:="Wieviel Zeilen sollen eingefügt werden?", Title:="Zeilenanzahl", Type:=1)
        If intAnz > 0 Then
            Rows(myRange.Row + 1).Resize(intAnz).Insert Shift:=xlDown
            Rows(myRange.Row).AutoFill Destination:=Rows(myRange.Row).Resize(intAnz + 1), Type:=xlFillDefault
        End If
    End If
End Sub
  1. Führe das Makro aus:
    • Gehe zurück zu Excel und wähle Makros im Entwicklertools-Bereich.
    • Wähle ZeilenEinfügen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 13 (Typen unverträglich):

    • Dieser Fehler tritt auf, wenn die Eingabe nicht korrekt ist. Stelle sicher, dass du eine Zeile auswählst und eine Zahl für die Zeilenanzahl eingibst.
  • Fehler: Laufzeitfehler 1004 (AutoFill-Methode konnte nicht ausgeführt werden):

    • Dieser Fehler kann auftreten, wenn die Autofill-Methode auf einen leeren Bereich angewendet wird. Überprüfe den Bereich, den du ausgewählt hast.
  • Fehlende Zeilen:

    • Wenn nach der Ausführung des Makros keine Zeilen eingefügt werden, stelle sicher, dass du eine gültige Zeile gewählt hast.

Alternative Methoden

Wenn du nicht mit Makros arbeiten möchtest, kannst du auch die Tabelle manuell bearbeiten:

  1. Wähle die Zeile aus, über der du neue Zeilen einfügen möchtest.
  2. Rechtsklicke und wähle Zeilen einfügen.
  3. Wiederhole den Vorgang für die gewünschte Anzahl an Zeilen.

Für komplexe Aufgaben ist die Verwendung von Makros jedoch effizienter.


Praktische Beispiele

Angenommen, du möchtest drei neue Zeilen über Zeile 10 einfügen:

  1. Wähle Zeile 10 aus.
  2. Führe das Makro aus.
  3. Gib in der ersten Inputbox „10“ ein und in der zweiten Inputbox „3“.
  4. Nach dem Ausführen des Makros hast du drei neue leere Zeilen ab Zeile 10 eingefügt.

Tipps für Profis

  • Verwende Option Explicit in deinem VBA-Code, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler aufgrund von Tippfehlern zu vermeiden.
  • Halte deine Makros modular, indem du häufig verwendete Funktionen in separate Subroutinen auslagerst. Dies verbessert die Lesbarkeit und Wartbarkeit deines Codes.
  • Nutze On Error GoTo für eine bessere Fehlerbehandlung anstelle von On Error Resume Next, um Fehler gezielt zu behandeln.

FAQ: Häufige Fragen

1. Warum funktioniert das Makro nicht? Stelle sicher, dass du die richtige Zeile auswählst und eine positive Zahl für die Zeilenanzahl eingibst.

2. Was ist der Unterschied zwischen Rows und Range? Rows bezieht sich auf Zeilen in Excel, während Range einen spezifischen Zellbereich definiert. Für das Einfügen von Zeilen ist Rows oft die bessere Wahl.

3. Wie kann ich das Makro anpassen, um eine bestimmte Anzahl an leeren Zeilen einzufügen? Ändere den Code in der Zeile, die für das Einfügen zuständig ist, sodass sie die gewünschte Anzahl an leeren Zeilen einfügt.

4. Ist dieses Makro mit allen Excel-Versionen kompatibel? Ja, das Makro sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige