Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Hilfe bei Code zum speichern ins nächste Arbeitsblatt
#1
Hallo zusammen,

ich bin in Sachen VBA noch ein kleiner Anfänger, doch langsam fange ich an ein wenig zu lernen und selber etwas zu programmieren.

Leider hänge ich bei einem kleinen Schönheitfehler im Code fest.

.xlsm   Packmengen2.xlsm (Größe: 170,32 KB / Downloads: 6)


Ich habe eine Userform von der ich eine andere Userform aufrufe, in der ich einen neuen Artikel anlege.
Das anlegen und speicher klappt, doch er speichert es nicht in der ertsen freien Zeile ab, sondern viel weiter unten.
Darüber sind dann ne Menge Zeilen frei.

Ich habe im Blatt "Artikelmenge_Palette" auch schon mal alles gelöscht und von vorne angefangen.
Also wieder nue Artikel angelegt, doch er speichert immer erst ab Zeile 32.

In meiner beigefügten Mappe ist es zu sehen. Vielleicht schaut sich jemand meinen Code an und sieht, was ich dort falsch gemacht habe?

Ich weiß nicht warum das so ist?

Grüße Mike
to top
#2
Hallo Mike,

versuchs mal so

Code:
Private Sub CommandButton1_Click()
'Variable zur Ermittlung der letzten verwendeten Zeile in Tabelle1
Dim ZeileMax As Long
'Variable zum Schreiben der Werte aus UserForm in in die erste freie Zeile
Dim Zeile As Long

With Sheets("Artikelmenge_Palette")
'Alternativ kannst Du auch statt Tabelle1 Sheets("Bestell-Liste") verwenden
'Diese Schreibweise hätte allerdings den Nachteil, dass sollte ein Anwender die Tabelle umbenennen
'würde dieser Schreibweise dazu führen, das der Code nicht mehr funktioniert.

'Ermittlung der letzten verwendeten Zeile
ZeileMax = .UsedRange.Rows.Count
'Erste freie Zeile = ZeileMax + 1 Zeile
'Zeile = ZeileMax + 1
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'Schreibt die Werte aus TextBox1 in die erste freie Zeile in Spalte A
.Range("A" & Zeile).Value = Me.TextBox1.Value
'Schreibt die Werte aus TextBox2 in die erste freie Zeile in Spalte B
.Range("B" & Zeile).Value = Me.TextBox2.Value
'Schreibt die Werte aus TextBox3 in die erste freie Zeile in Spalte C
.Range("C" & Zeile).Value = Me.TextBox3.Value
'Schreibt die Werte aus TextBox4 in die erste freie Zeile in Spalte D
.Range("D" & Zeile).Value = Me.TextBox4.Value
'Schreibt die Werte aus TextBox5 in die erste freie Zeile in Spalte E
.Range("E" & Zeile).Value = Me.TextBox5.Value
'Schreibt die Werte aus TextBox6. in die erste freie Zeile in Spalte F
.Range("F" & Zeile).Value = Me.TextBox6.Value
'Schreibt die Werte aus TextBox7. in die erste freie Zeile in Spalte G
.Range("G" & Zeile).Value = Me.TextBox7.Value
'Schreibt die Werte aus TextBox8. in die erste freie Zeile in Spalte H
.Range("H" & Zeile).Value = Me.TextBox8.Value
'Schreibt die Werte aus TextBox9. in die erste freie Zeile in Spalte H
.Range("I" & Zeile).Value = Me.TextBox9.Value
'Schreibt die Werte aus TextBox10. in die erste freie Zeile in Spalte J
.Range("J" & Zeile).Value = Me.TextBox10.Value
'Schreibt die Werte aus TextBox11. in die erste freie Zeile in Spalte K
.Range("K" & Zeile).Value = Me.TextBox11.Value
'Schreibt die Werte aus TextBox12. in die erste freie Zeile in Spalte L
.Range("L" & Zeile).Value = Me.TextBox12.Value

End With
End Sub
Gruß Stefan
Win 7 / Office 2007
[-] Folgende(r) 1 Benutzer sagt Danke an Steffl für diesen Beitrag:
Mike4711
to top
#3
Hallo Stefan,
geht so auch nicht.
So überschreibt er mir meine Zeile 2, in der ich Spaltenüberschriften habe.

Spalte C,D,E und H,I,J in Zeile 2 gehört noch zu meinen Spaltenüberschriften.

Über diesen Spalten, in Zeile 1, gibt es eine Hauptüberschrift für die Spalten C D E H I und J.
Also muss ab der 3. Zeile das aller erste mal ein Artikel abgelegt werden.

Wie in meinem Bild zusehen.
   

Doch mit dem Code aus deinem Beispiel, speichert er in Zeile 2 und danach gar nicht mehr?

Gruß Mike
to top
#4
Hallo Stefan,

ich hab noch einmal ausprobiert.

Wie im Bild von meinem Vor-Beitrag zu sehen, hab ich die Zeile 3im Blatt "Artikelmeng_Palett" per Hand eingetragen.
Diese habe ich stehen lassen und gerade mit deinem Code weitere Artikel angelegt, diese hat er jetzt schön unter meiner manuell eingetragenen Zeile eingetragen.

Also geht der Code so. Kann es sein, da ich in der ersten Zeile über den Spalten C D E,  H I und J, jeweils die 3 zusammen hängenden Zelle verbunden habe, das der Code dann so nicht funktioniert?

Gruß Mike
to top
#5
Hallo Mike

(29.04.2015, 17:55)Mike4711 schrieb: Also geht der Code so. Kann es sein, da ich in der ersten Zeile über den Spalten C D E,  H I und J, jeweils die 3 zusammen hängenden Zelle verbunden habe, das der Code dann so nicht funktioniert?

Ja, so ist es. Besser gesagt, die verbundenen Zellen A1 und A2.
Gruß Stefan
Win 7 / Office 2007
[-] Folgende(r) 1 Benutzer sagt Danke an Steffl für diesen Beitrag:
Mike4711
to top
#6
Ok.....dann muss ich wohl den ersten Artikel immer erst per Hand eingeben. Smile

Aber das wird wohl nicht so oft vorkommen, da ich das Blatt ja befüllen will.

Einen kleinen Nebeneffekt at da übertragen der Daten aus der Maske in das Zielblatt aber noch?
ich habe das Zielblatt jeder Spalte eine besondere Formatierung gegeben und diese wird beim abspeichern von der Maske
zum Zielblatt überschrieben.

Also z. b  G - J sind von mir vorher als Zahl ( 2 Stellen nach dem Komma) formatiert.

der Code speichert dort und anschließen sind die Zeilen dann als Text formatiert?


Gruß Mike
to top
#7
Hi Mike,

(29.04.2015, 18:11)Mike4711 schrieb: Ok..... dann muss ich wohl den ersten Artikel immer erst per Hand eingeben. Smile

ne, mußt Du nicht!


Du kannst doch auch ganz einfach statt
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

diese Zeile für die Spalte C verwenden:
Zeile = .Cells(.Rows.Count, 3).End(xlUp).Row + 1

denn die 1 ist für die Spalte A, Spalte C ist dann also die 3
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#8
H,

noch einfacher wäre es: Verbundene Zellen A1:A2 aufheben, steht ja eh nur in A1 etwas und A2 bliebe dann leer.

Verbundene Zellen sind fast immer entbehrlich, da  das gewollte Aussehen auch durch Formatierung usw. herzustellen ist. Verbundene Zellen bringen mehr Nachteile als Vorteile, daher möglichst darauf verzichten.
Mit freundlichen Grüßen  Smile
Michael

Win 7 64 bit / Excel 2007/2016
to top
#9
Hallo Mike,

(29.04.2015, 18:11)Mike4711 schrieb: Einen kleinen Nebeneffekt at da übertragen der Daten aus der Maske in das Zielblatt aber noch?
ich habe das Zielblatt jeder Spalte eine besondere Formatierung gegeben und diese wird beim abspeichern von der Maske
zum Zielblatt überschrieben.

Also z. b  G - J sind von mir vorher als Zahl ( 2 Stellen nach dem Komma) formatiert.

der Code speichert dort und anschließen sind die Zeilen dann als Text formatiert?

darum habe ich hier den Textboxinhalt in eine Zahl umgewandelt (mit zum Beispiel CDbl), weil eine Textbox wie der Name schon sagt nur Text zurück liefert.
Gruß Stefan
Win 7 / Office 2007
to top
#10
lngC = ComboBox1.ListIndex + 1
(30.04.2015, 12:59)Steffl schrieb: Hallo Mike,


(29.04.2015, 18:11)Mike4711 schrieb: Einen kleinen Nebeneffekt at da übertragen der Daten aus der Maske in das Zielblatt aber noch?
ich habe das Zielblatt jeder Spalte eine besondere Formatierung gegeben und diese wird beim abspeichern von der Maske
zum Zielblatt überschrieben.

Also z. b  G - J sind von mir vorher als Zahl ( 2 Stellen nach dem Komma) formatiert.

der Code speichert dort und anschließen sind die Zeilen dann als Text formatiert?

darum habe ich hier den Textboxinhalt in eine Zahl umgewandelt (mit zum Beispiel CDbl), weil eine Textbox wie der Name schon sagt nur Text zurück liefert.

Hallo Stefan,

entschuldige, das war mir nicht klar.

Ich habe nun diesen Code für das abspeichern von neuen Artikeln, der auch funktioniert.

Hier auch das Problem, das im Zielblatt, Text gespeichert wird, anstatt Zahl.

Kann ich das umwandeln mit deinem Beispiel CDbl auch so anwenden?

Code:
Private Sub CommandButton1_Click()

Dim ZeileMax As Long

Dim Zeile As Long

With Sheets("Artikelmenge_Palette")

ZeileMax = .UsedRange.Rows.Count

Zeile = .Cells(.Rows.Count, 2).End(xlUp).Row + 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.TextBox4.Value
.Range("E" & Zeile).Value = Me.TextBox5.Value
.Range("F" & Zeile).Value = Me.TextBox6.Value
.Range("G" & Zeile).Value = Me.TextBox7.Value
.Range("H" & Zeile).Value = Me.TextBox8.Value
.Range("I" & Zeile).Value = Me.TextBox9.Value
.Range("J" & Zeile).Value = Me.TextBox10.Value
.Range("K" & Zeile).Value = Me.TextBox11.Value
.Range("L" & Zeile).Value = Me.TextBox12.Value

End With

End Sub
Gruß Mike
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Automatisch Datum in nächste freie Zelle eintragen NunoBrito 17 188 22.11.2016, 10:33
Letzter Beitrag: NunoBrito
  Hilfe beim Code "Schleife von bis" michel34497 2 67 16.11.2016, 17:55
Letzter Beitrag: michel34497
  Zeilen in neues Arbeitsblatt je nach Bedingung kopieren Zeppi 1 61 24.10.2016, 11:22
Letzter Beitrag: IchBinIch
  Arbeitsblatt (.csv) kopieren Drakecore 11 219 23.09.2016, 10:53
Letzter Beitrag: Kuwer
  Arbeitsblatt maximiert öffnen lapunta 3 220 26.08.2016, 16:33
Letzter Beitrag: schauan
  Arbeitsblatt automatisch erstellen its_w1n5t0n1995 8 367 24.08.2016, 19:36
Letzter Beitrag: schauan
  Feldindizes bestimmen, welche die nächste kleinere bzw. größere Zahl beinhalten Lupy 12 499 11.08.2016, 17:52
Letzter Beitrag: Lupy
  Nächste freie zahl ausgeben NiMü7 15 1.251 25.07.2016, 13:44
Letzter Beitrag: Henry
  Tabelle als Arbeitsblatt erstellen Nenntmichmo 13 607 19.06.2016, 12:22
Letzter Beitrag: snb
  Arbeitsblatt sortieren Nixblick0815 5 634 15.05.2016, 15:18
Letzter Beitrag: Nixblick0815

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste