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
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 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Mike4711
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
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
Top
#5
Hallo Mike

(29.04.2015, 18: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 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Mike4711
Top
#6
Ok.....dann muss ich wohl den ersten Artikel immer erst per Hand eingeben. :)

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
Top
#7
Hi Mike,

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

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
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  :)
Michael
Top
#9
Hallo Mike,

(29.04.2015, 19: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 10 / Office 2016
Top
#10
lngC = ComboBox1.ListIndex + 1
(30.04.2015, 13:59)Steffl schrieb: Hallo Mike,


(29.04.2015, 19: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
Top


Gehe zu:


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