Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Ganze Spalte kopieren und vor letzter Sp
18.04.2020 15:50:46
Patrick
Hallo liebes Forum,
leider habe ich es nicht rechtzeitig geschafft mich für die Hilfe zu meiner letzten Frage zu bedanken. (zu spät angesehen)
Nun habe ich ein neues Projekt.
Im Tabellenblatt Vorlagen ist die Spalte A:A mit Daten, Formeln, und Formatierungen gefüllt.
Diese wird kopiert, dann soll es zwei Spalten vor dem Letzten Eintrag in A:A im Tabellenblatt Urlaub als neue Spalte mit der Formatierung, den Werten und den Formeln eingefügt werden. Der Makrorecorder hat mir dabei leider nicht wirklich weitergeholfen. Die Spalte kopieren ist nicht das Problem..
Ich komme beim Einfügen an die richtige Stelle nicht weiter. Userform öffnet sich, in der Textbox1 wird die Anzahl der benötigten Spalten eingegeben. Mit dem Klick auf okay solle die kopierte Spalte wie oben beschrieben eingefügt werden...
Gruß Patrick

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ganze Spalte kopieren und vor letzter Sp
19.04.2020 10:48:37
Werner
Hallo,
wie jetzt, was jetzt?
Erst schreibst du davon dass die Spalte A aus dem Blatt Vorlagen ins Blatt Urlaub, zwei Spalten vor der letzten Spalte, eingefügt werden soll.
Am Ende dann plötzlich von einer Userform mit Textbox und der Anzahl der benötigten Spalten?!?
Was meinst du jetzt damit?
Gruß Werner
Möglicherweise...
19.04.2020 11:19:30
Werner
Hallo,
...meinst du das ja so:
Private Sub CommandButton1_Click()
Dim loAnzahl As Long, loSpalte As Long
Application.ScreenUpdating = False
If Me.TextBox1  "" Then
If IsNumeric(Me.TextBox1) Then
loAnzahl = Me.TextBox1
Worksheets("Vorlagen").Columns("A").Copy
With Worksheets("Urlaub")
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1)
.Columns(loSpalte).Resize(, loAnzahl).Insert
Unload Me
Application.CutCopyMode = False
End With
Else
MsgBox "Fehler: Der Wert ist nicht numerisch."
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End If
Else
MsgBox "Fehler: Bitte Anzahl an Spalten eintragen."
Me.TextBox1.SetFocus
End If
End Sub
Gruß Werner
Anzeige
AW: Möglicherweise...
19.04.2020 19:32:11
Patrick
Hallo Werner,
Das ist es was ich wollte.
Habe es zwischenzeitlich selbst hinbekommen. Habe jetzt noch die Abfrage nach dem Nummerischen Wert von dir übernommen. Vielen Dank
Gruß Patrick
Gerne u. Danke für die Rückmeldung. o.w.T.
19.04.2020 20:26:11
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
20.04.2020 08:07:49
Patrick
Hallo Werner,
ich habe jetzt versucht deinen kompletten Code zu übernehmen weil mir deine Lösung als die Bessere erschien, ich hatte vorher die Spalte A kopiert und dann als neue Spalte eingefügt.
Per Textbox habe ich die Anzahl der Spalten abgefragt. Den wert habe ich einer IF schleife übergeben.
das sah so aus:

Sub Schleife()
Dim i As Long
For i = 1 To Me.Textbox1
Debug.Print i
Next

Bei deinem Code bekomme ich an der Stelle

loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1)

den Fehler: Laufzeitfehler '13: Typen unverträglich
loSpalte gubt 0 aus..
Wo ist der Fehler? Bzw. was verursacht Ihn?
Gruß Patrick
Anzeige
AW: Möglicherweise...
20.04.2020 08:53:28
Patrick
Hallo Werner,
mein funktionierender Code

Private Sub CommandButton1_Click()
Dim Anz As String
Dim i As Long
Anz = Me.TextBox1
For i = 1 To Anz
Debug.Print i
If Me.TextBox1  "" Then
If IsNumeric(Me.TextBox1) Then
Sheets("Vorlage").Columns("A:A").Copy
Sheets("Urlaub").Range("A1:ZZ1").End(xlToRight).Offset(0, -1).Insert
Else
MsgBox "Fehler: Bitte Ziffer eingeben."
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End If
Else
MsgBox "Fehler: Bitte Anzahl an Spalten eintragen."
Me.TextBox1.SetFocus
End If
Next
Unload Me
Application.CutCopyMode = False
End Sub
Mir gefällt die Angelegenheit mit der Schleife nicht.
Außerdem bekommt man einen Fehler wenn die Textbox leer ist.
Fehler: Laufzeitfehler '13 Typen unverträglich!
an dieser Stelle:
For i = 1 To Anz
Gruß Patrick
Anzeige
AW: Möglicherweise...
20.04.2020 09:54:59
Patrick
Hallo Werner und alle anderen.
So jetzt mit Beispieldatei.
Die Probleme häufen sich...
Wenn eine Spalte per vba eingefügt wird erweitert sich die Formel in P:P nicht. Das bedeutet das die Werte in den Spalten davor gezählt werden, jedoch nicht die Werte in den neu eingefügten Spalten.
Mein Code funktioniert zwar ist aber auf jeden Fall verbesserungswürdig!
Hier die Beispieldatei: https://www.herber.de/bbs/user/136880.xlsb
Private Sub CommandButton1_Click()
Dim Anz As String
Dim i As Long
Anz = Me.TextBox1
For i = 1 To Anz 'Das geht sicher auch ohne Schleife... gibt fehler wenn Textbox leer
Debug.Print i
If Me.TextBox1  "" Then
If IsNumeric(Me.TextBox1) Then
Sheets("Vorlage").Columns("A:A").Copy
Sheets("Urlaub").Range("A1:ZZ1").End(xlToRight).Offset(0, -1).Insert 'Nachteil: Zellen in A: _
A Müssen ALLE gefüllt sein! (xlToLeft) ergibt Fehler.
Else
MsgBox "Fehler: Bitte Ziffer eingeben."
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End If
Else
MsgBox "Fehler: Bitte Anzahl an Spalten eintragen."
Me.TextBox1.SetFocus
End If
Next
Unload Me
Application.CutCopyMode = False
End Sub

Anzeige
AW: Möglicherweise...
21.04.2020 09:19:11
Werner
Hallo,
stellt sich mir die Frage:
Ich habe dir einen Code geschickt, den benutzt du aber nicht. Wozu schicke ich dir dann einen Code?
Dass mein Code in dieser Codezeile:
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1)

einen Fehler produziert, hättest du auch schreiben können. Dann wäre mir gleich aufgefallen, dass mir da beim Einstellen des Codes (warum auch immer) ein .Column verloren gegangen ist. Die Codezeile müsste richtig so:
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1).Column

aussehen.
Und zu deinem "Formelproblem":
Einfach nach dem Einfügen der zusätzlichen Spalten die Formel per Code neu in den Zellbereich schreiben.
Private Sub CommandButton1_Click()
Dim loAnzahl As Long, loSpalte As Long, loLetzte As Long
Application.ScreenUpdating = False
If Me.TextBox1  "" Then
If IsNumeric(Me.TextBox1) Then
loAnzahl = Me.TextBox1
If loAnzahl > 0 Then
Worksheets("Vorlage").Columns("A").Copy
With Worksheets("Urlaub")
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1).Column
.Columns(loSpalte).Resize(, loAnzahl).Insert
loLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
loSpalte = .Cells(1, .Columns.Count).End(xlToLeft).Offset(, -1).Column
.Range(.Cells(7, loSpalte), .Cells(loLetzte, loSpalte)).FormulaR1C1 = _
"=COUNTIF(RC7:RC[-1],""U"")+COUNTIF(RC7:RC[-1],""U1"")"
Application.CutCopyMode = False
Unload Me
End With
Else
MsgBox "Fehler: Du willst 0 Spalten einfügen?"
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End If
Else
MsgBox "Fehler: Bitte Ziffer eingeben."
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0
Me.TextBox1.SelLength = Len(Me.TextBox1)
End If
Else
MsgBox "Fehler: Bitte Anzahl an Spalten eintragen."
Me.TextBox1.SetFocus
End If
Gruß Werner
Anzeige
AW: Möglicherweise...
21.04.2020 19:09:42
Patrick
Hallo Werner,
bitte nicht böse sein...
ich wollte erst versuchen das selbst zu lösen. Hatte deinen Kompletten Code probiert dabei kam der Fehler. Also versuchte ich das Problem Selbst zu lösen und beide Codes zu kombinieren (aus Fehlern lernt man:-) ).
Die Datei die ich hochgeladen habe diente nur zur Veranschaulichung. Für mich stand fest das ich deinen Code verwenden werde. Alleine schon aus dem Grund das du es ohne .select und ohne Schleife programmiert hast.
Hut ab für dein Wissen. Dieses würde ich niemals in Frage stellen.
Welches ist denn nun die Bessere Variante? Mein Code hatte ja eine leere Spalte Eingefügt und dann die Werte und Formate aus "Vorlagen" kopiert und in "Urlaub" eingefügt.
Was mich etwas verwundert hat war das dein Code in einem lehren Tabellenblatt tadellos funktioniert hat... ( mit einfachen Werten zum testen) wenn ich dann 1 zu 1 deinen Code in meine *.xlsb eingefügt habe kam ein Fehler nach dem anderen. In einem leeren Tabellenblatt wurden auch die Formeln (Bezüge) automatisch erweitert, nicht aber in meiner Tabelle. auch wenn ich alles in einem neuen Tabellenblatt nachgebaut habe wurde die Formel nicht erweitert.
Kannst du mir sagen wie das zu Stande kommt?
Gruß Patrick
Anzeige
AW: Möglicherweise...
21.04.2020 19:35:15
Werner
Hallo,
sorry, aber mit den Aussagen kann ich jetzt nicht wirklich was anfangen.
Läuft mein Code in deiner Datei jetzt oder läuft er nicht?
Wenn nicht. Welche Fehlermeldungen und in welchen Codezeilen?
Gruß Werner
AW: Möglicherweise...
22.04.2020 09:01:57
Patrick
Hallo Werner,
dein Code funktioniert super!! Großes DANKE nochmal.
Zu meiner Frage:
Ich hatte deinen Code in einem leeren Tabellenblatt mit einfachen Werten ohne Formatierung ausprobiert, das funktionierte. Dann habe ich meine Tabelle in dieses Blatt eingefügt und der Code Funktionierte nicht mehr. Mich interessiert warum das so ist. Der Fehler war wieder Typen unverträglich.
Nun eine Weitere Frage:
Was muss ich an deinem Code Ändern um Spalten zwischen E:E und F:F einzufügen. (Statisch, es soll immer zwischen E:E und F:F eingefügt werden).
Dabei sollen wie in deinem Code die Formeln in der Vorletzten Spale erhalten bleiben und die Bezüge angepasst werden.
Also UserForm öffnet sich, Eingabe der Anzahl der Spalten... Spalten zwischen E:E und F:F einfügen, Formeln anpassen.
Ich bin leider NOCH nicht so weit um den ganzen Code zu verstehen.
"=COUNTIF(RC7:RC[-1],""U"")+COUNTIF(RC7:RC[-1],""U1"")"

Schreibt die Formeln in die richtige Spalte.
.Range(.Cells(7, loSpalte), .Cells(loLetzte, loSpalte)).FormulaR1C1 = _

Was macht dieser Teil?
Vielen Dank Gruß Patrick
Anzeige
AW: Möglicherweise...
22.04.2020 17:13:16
Patrick
Bevor ich es Vergesse,
die "U" und "U1" in den Spalten E:E und F:F + alle dazwischen neueingefügten Spalten sollen in der vorletzten Spalte nicht mitgezählt werden.
Vielen Dank für die Unterstützung.
Gruß Patrick

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige