Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Code zum Datensatz ändern/speichern geht nicht
#1
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"


.xlsm   Packmengen2.xlsm (Größe: 172,2 KB / Downloads: 5)

Grüße Mike
Antworten Top
#2
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]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#3
.Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value
(29.04.2015, 22: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
Antworten Top
#4
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
Antworten Top
#5
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 Long

eingefü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 Ok
und 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
Antworten Top
#6
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
Antworten Top
#7
Dim ZeileAktuell As Long
.Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value
Hallo 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? Blush

Muss ich

anstatt
.Cells(ZeileAktuell, 1).Value = Me.TextBox1.Value

so angeben?

.Cells(1, 1).Value = Me.TextBox1.Value

Fehlt noch eine Zeile im Code nach der Zeile:

Dim ZeileAktuell As Long


Gruß Mike
Antworten Top
#8
(30.04.2015, 18: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:

.xlsm   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
Antworten Top
#9
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 Smile

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

(30.04.2015, 20: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.
Antworten Top


Gehe zu:


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