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.


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
to 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?
?mage
Gruß Günter
aus der Messe-, Buch-, Universitäts- und Autostadt Leipzig
Windows 7 32 Bit / Windows 8.1 64 Bit • Excel 2000 / Excel 2003 / Excel 2007 / Excel 2010 - alle 32 Bit
to 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
to 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 7 / Office 2007
to 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
to 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 7 / Office 2007
to 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
to 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 Wink

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. Wink

Gruß Mike
to 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 :-)

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-2016)
to top
#10
Hi Mike,

(30.04.2015, 20:45)Mike4711 schrieb: Du lachst über mich Wink

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.
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


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Makro code funktioniert nicht - Woran liegt es? FR-CGI 3 54 30.11.2016, 18:53
Letzter Beitrag: RPP63
  Code kopiert Funktioniert NICHT michel34497 1 68 16.11.2016, 14:10
Letzter Beitrag: schauan
  Datensatz (Zeile) aufteilen in neue Zeilen Absolut Hugo 1 62 13.11.2016, 17:33
Letzter Beitrag: shift-del
  Zeilenumbruch mit ALT+Enter geht nicht - springt dabei in andere Zelle bennybg 8 140 14.10.2016, 19:13
Letzter Beitrag: WillWissen
  Doppelter Datensatz zwei Spalten PitaPit 7 171 20.09.2016, 15:47
Letzter Beitrag: PitaPit
Sad Formelwerte lassen sich nicht ändern Pivo 3 207 20.09.2016, 08:59
Letzter Beitrag: Rabe
  Nach jedem Datensatz acht Leerzeilen mit Makro Hschuh 7 263 03.08.2016, 08:19
Letzter Beitrag: Hschuh
  Paneldaten- Aufbereitung Datensatz Felixk 6 294 12.07.2016, 10:09
Letzter Beitrag: Felixk
  Vergleich Funktion geht bei mir nicht Maria2017 6 330 26.06.2016, 19:50
Letzter Beitrag: Jockel
  Strukturbaum auslesen aus Datensatz lubebi91 11 664 21.06.2016, 08:49
Letzter Beitrag: lubebi91

Gehe zu:


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