Registriert seit: 13.11.2014
Version(en): 2010
Hallo zusammen, ich komme mit meinem letzten Schritt einer Maske zum suchen und ändern von Artikeln wieder einmal nicht weiter. Ich habe in meiner Maske einen Button mit einem Code belegt, der mir die angezeigten TextBoxen, in der ich Änderungen vorgenommen habe, diese auch genau in der selben Zeile im Arbeitsblatt "Artikelmenge_Palette" abspeichert...also überschreibt. Leider klappt es noch nicht, hänge fest. Brauche dringend Hilfe hierzu. Vielleicht kann mir jemand dazu helfen? Hier meine Testmappe mit der Maske "Menge auf Palette"
Packmengen2.xlsm (Größe: 172,2 KB / Downloads: 5)
Grüße Mike
Registriert seit: 11.04.2014
Version(en): 2021
Hallo Mike
was funktioniert denn nicht? Nach einem flüchtigen Blick auf deinen Code müsste es funktionieren - was passiert, wenn du korrigieren wiillst? Wird deine aktZelle falsch ausgelesen und interpretiert?
![[Bild: attachment-190.gif]](https://www.world-of-smilies.com/wos_computer/attachment-190.gif) Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 13.11.2014
Version(en): 2010
.Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value (29.04.2015, 23:20)Glausius schrieb: Hallo Mike
was funktioniert denn nicht? Nach einem flüchtigen Blick auf deinen Code müsste es funktionieren - was passiert, wenn du korrigieren wiillst? Wird deine aktZelle falsch ausgelesen und interpretiert? Hallo Glasius, wenn ich in der Maske auf " Andern/Speichern drücke, kommt die Meldung "Variable nicht definiert! Anschliessend makiert mir der VBA Editor im Code diese Zeile, das Wort "ZeileAktuell" .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value Grüße Mike
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Mike, in deinem Code gibt es wahrscheinlich keine Codezeile Code: Dim ZeileAktuell As Long
auch ist, wenn das recht bedenke keine Zuweisung an die Variable ZeileAktuell vorhanden und obige Codezeile gibt dir dann den nächsten Fehler zurück.
Gruß Stefan Win 10 / Office 2016
Registriert seit: 13.11.2014
Version(en): 2010
Hallo Stefan, mmmh.....ich habe diesen Code im Netz gefunden und so übernommen, nur mein Tabellenblattnamen eingefügt, dachte das er so funktioniert. Habe deine Zeile Dim ZeileAktuell As Longeingefügt. Jetzt bekommen ich keine Fehlermeldung mehr. Wenn ich jetzt einen Wert in der Maske ändere, diesen mit dem Button speichern will, fragt die Maske nach, ob ich ändern will, sage Okund es kommt keine Fehlermeldung. Doch die Änderung wird nicht abgespeichert.Was fehlt noch in dem Code?Code: Private Sub CommandButton2_Click() Dim ZeileAktuell As Long 'Daten korrigieren If MsgBox("Daten ändern?", vbQuestion, "Datensatz korrigieren") = vbYes Then With Worksheets("Artikelmenge_Palette") .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value .Cells(ZeileAktuell, 2).Value = Me.TextBox2.Value .Cells(ZeileAktuell, 3).Value = Me.TextBox3.Value .Cells(ZeileAktuell, 4).Value = Me.TextBox4.Value .Cells(ZeileAktuell, 5).Value = Me.TextBox5.Value .Cells(ZeileAktuell, 6).Value = Me.TextBox6.Value .Cells(ZeileAktuell, 7).Value = Me.TextBox7.Value .Cells(ZeileAktuell, 8).Value = Me.TextBox8.Value .Cells(ZeileAktuell, 9).Value = Me.TextBox9.Value .Cells(ZeileAktuell, 10).Value = Me.TextBox10.Value .Cells(ZeileAktuell, 11).Value = Me.TextBox11.Value End With ' MsgBox ("Die Daten wurden geändert") End If End Sub
Gruß Mike
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Mike, die Zuweisung eines Wertes an die Variable ZeileAktuell (es sei denn, bei deiner Excelversion gibt es eine Zeile 0 :25: ) Damit Du auch testen kannst, welchen Wert die Variable ZeileAktuell habe ich im Code mal ein Stop eingefügt. Excel stoppt an dieser Stelle und Du kannst überprüfen, wie der Code abgearbeitet wird in dem Du im Einzelschritt (mit der F8-Taste) durch den Code gehst. Siehe auch hier. Code: Private Sub CommandButton2_Click() Dim ZeileAktuell As Long
Stop 'Daten korrigieren If MsgBox("Daten ändern?", vbQuestion, "Datensatz korrigieren") = vbYes Then With Worksheets("Artikelmenge_Palette") .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value .Cells(ZeileAktuell, 2).Value = Me.TextBox2.Value .Cells(ZeileAktuell, 3).Value = Me.TextBox3.Value .Cells(ZeileAktuell, 4).Value = Me.TextBox4.Value .Cells(ZeileAktuell, 5).Value = Me.TextBox5.Value .Cells(ZeileAktuell, 6).Value = Me.TextBox6.Value .Cells(ZeileAktuell, 7).Value = Me.TextBox7.Value .Cells(ZeileAktuell, 8).Value = Me.TextBox8.Value .Cells(ZeileAktuell, 9).Value = Me.TextBox9.Value .Cells(ZeileAktuell, 10).Value = Me.TextBox10.Value .Cells(ZeileAktuell, 11).Value = Me.TextBox11.Value End With ' MsgBox ("Die Daten wurden geändert") End If End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 13.11.2014
Version(en): 2010
30.04.2015, 21:19
(Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2015, 21:21 von Mike4711.)
Dim ZeileAktuell As Long .Cells(ZeileAktuell, 1).Value = Me.TextBox1.ValueHallo Stefan, Ok.....mit dem Stop sehe ich wo er anhält, weil noch etwas nicht stimmt. Doch ich weiß immer noch nicht, was dort nicht stimmt?  Muss ich anstatt .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Valueso angeben?.Cells(1, 1).Value = Me.TextBox1.ValueFehlt noch eine Zeile im Code nach der Zeile:Dim ZeileAktuell As LongGruß Mike
Registriert seit: 13.11.2014
Version(en): 2010
30.04.2015, 21:45
(Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2015, 21:46 von Mike4711.)
(30.04.2015, 19:57)Steffl schrieb: Hallo Mike,
die Zuweisung eines Wertes an die Variable ZeileAktuell (es sei denn, bei deiner Excelversion gibt es eine Zeile 0 :25: )
Damit Du auch testen kannst, welchen Wert die Variable ZeileAktuell habe ich im Code mal ein Stop eingefügt. Excel stoppt an dieser Stelle und Du kannst überprüfen, wie der Code abgearbeitet wird in dem Du im Einzelschritt (mit der F8-Taste) durch den Code gehst. Siehe auch hier.
Code: Private Sub CommandButton2_Click() Dim ZeileAktuell As Long
Stop 'Daten korrigieren If MsgBox("Daten ändern?", vbQuestion, "Datensatz korrigieren") = vbYes Then With Worksheets("Artikelmenge_Palette") .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value .Cells(ZeileAktuell, 2).Value = Me.TextBox2.Value .Cells(ZeileAktuell, 3).Value = Me.TextBox3.Value .Cells(ZeileAktuell, 4).Value = Me.TextBox4.Value .Cells(ZeileAktuell, 5).Value = Me.TextBox5.Value .Cells(ZeileAktuell, 6).Value = Me.TextBox6.Value .Cells(ZeileAktuell, 7).Value = Me.TextBox7.Value .Cells(ZeileAktuell, 8).Value = Me.TextBox8.Value .Cells(ZeileAktuell, 9).Value = Me.TextBox9.Value .Cells(ZeileAktuell, 10).Value = Me.TextBox10.Value .Cells(ZeileAktuell, 11).Value = Me.TextBox11.Value End With ' MsgBox ("Die Daten wurden geändert") End If End Sub
Du lachst über mich ;) Ich verstehe immer noch nicht diese Programmiersache in VBA. Versuche bestehende Code nach meinen Bedürfnissen anzupassen. Diese ganzen Befehle, muss ich erst lernen. Ich brauche nur noch diesen blöden vollständigen Code zum ändern und abspeichern eines Artikels. :22: :05:
Packmengen3.xlsm (Größe: 174,4 KB / Downloads: 2)
Sonst geht in dieser Maske schon alles....bis auf die kleine Macke mit den Text anstatt Zahlen. ;) Gruß Mike
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Mike, der Befehl Stop stoppt nicht, weil etwas falsch ist, sondern weil er so tun soll, wie er heißt. Wenn man mit der Maus über die Variable ZeileAktuell geht, dann wird einem zuweilen der Wert angezeigt. Alternativ kann man auch eine Überwachung festlegen, indem man mit der rechten Maustaste auf die Variable klickt und aus de Kontextmenü "Überwachung hinzufügen" wählt. Dann sieht man unter dem Codefenster im Überwachungsfenster den Wert der Variable. Alternativ könnte man auch eine Massagebox ausgeben  Eine numerische Variable hat bei Dimensionierung in Excel den Wert 0. Das kannst Du Dir z.B. mit einem Kurzprogramm anschauen: Code: Sub test() Dim ZeileAktuell As Long End Sub
Die Variable heißt Variable, weil man sie immer wieder mit anderen Werten befüllen kann. Man muss das aber auch tun, sonst behält sie ihren alten Wert - hier immer noch die Null vom Dimensionieren. Bei Dir ändert sich also vor der ersten Verwendung der Variable am Wert nicht. Beim Ausführen von .Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value steht immer noch 0 in der Variable. Wenn Du den Code nach dem Stop mit F8 fortsetzt, wird er zeilenweise abgearbeitet und die jeweils als nächstes abzuarbeitende Zeile gelb markiert. Wenn Du auf die gerade zitierte Zeile kommst und unten in die Überwachung schaust, steht als Wert immer noch 0. Eine Zeile 0 gibt es jedoch nicht. Jetzt müsstest Du Dir mal überlegen, in welche Zeile die Daten eigentlich sollen. Du hast oben geschrieben, ob auch .Cells(1, 1).Value = Me.TextBox1.Value geht. Du hättest an der Stelle jetzt also keine Variable, sondern einen festen Wert. Die folgende Frage hat schon wieder nichts mit VBA zu tun - ich nehme an, dass Dir die Bedeutung der beiden Einsen bei Cells klar ist: Willst Du die Daten immer in Zeile 1 eintragen? Wenn nicht, brauchst Du die Variable. Jetzt wäre nur die Frage, wo Du den Wert dafür herbekommst. Bei Änderungen suchst Du Dir ja einen Wert aus der ComboBox1. Die Combobox1 wird der Reihe nach mit den Artikelnummern gefüllt, die Nummer steht also immer an einer bestimmten Stelle. Die Nummer der Stelle des gewählten Eintrages ist eine Eigenschaft der ComboBox. Das kannst Du z.B. so ausprobieren: Code: Private Sub ComboBox1_Change() MsgBox Me.ComboBox1.ListIndex End Sub
So, jetzt haben wir eigentlich alle Informationen, um die Zeile zu ermitteln: ZeileAktuell=Me.ComboBox1.ListIndex Etwas fehlt da noch - Du musst bestimmt noch einen "Korrekturwert" verrechnen - Die Nummer aus der ComboBox ist eventuell nicht die Zeilennummer des Artikels ... Und wenn Du einen Artikel neu anlegst, müsstest Du die letzte belegte Zeile +1 nehmen.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi Mike, (30.04.2015, 21:45)Mike4711 schrieb: Du lachst über mich ;)
Ich verstehe immer noch nicht diese Programmiersache in VBA. So wie ich Stefan verstehe, verwendest Du die Variable "ZeileAktuell", sagst aber Excel nicht, was in der Variablen drin steht. Dann steht automatisch als Zeilenzahl die Zahl 0 drin und da es in Excel keine Zeile 0 gibt, funktioniert das nicht.
|