Registriert seit: 13.11.2014
Version(en): 2010
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.
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
Registriert seit: 11.04.2014
Version(en): Office 2007
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:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• Mike4711
Registriert seit: 13.11.2014
Version(en): 2010
29.04.2015, 18:46
(Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015, 18:48 von Mike4711.)
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
Registriert seit: 13.11.2014
Version(en): 2010
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
Registriert seit: 11.04.2014
Version(en): Office 2007
29.04.2015, 18:58
(Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015, 19:00 von Steffl.)
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:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• Mike4711
Registriert seit: 13.11.2014
Version(en): 2010
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
30.04.2015, 11:37
(Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2015, 11:38 von Rabe.)
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
Registriert seit: 10.04.2014
Version(en): Office 2007, 2016, Win 10 64 bit
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
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 13.11.2014
Version(en): 2010
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
|