Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Makro in VBA programmieren

Begonnen von wuffwuff2003, Juni 27, 2013, 13:18:04

⏪ vorheriges - nächstes ⏩

wuffwuff2003

Diese Befehlszeile hatte ich auch probiert, mit der Folge eines Laufzeitenfehlers 2115. Es sollen die Änderungen gespeichert werden die ich in den unterschiedlichen Dropdownboxen gemacht habe.

Mit dem Aktualisierungsbutton meinte ich den von Access selbst der oben in der Werkleiste steht mit der Bezeichnung "Alles Aktualisieren"


bahasu

#16
Hi

Zitat von: wuffwuff2003 am Juni 27, 2013, 21:28:53
mit der Folge eines Laufzeitenfehlers 2115.

Ist damit gemeint:
Das Makro oder die Funktion, das bzw. die für dieses Feld einer der Eigenschaften VorAktualisierung oder Gültigkeitsregel zugeordnet ist, hindert Microsoft Access daran, die Daten in em Feld zu speichern.


Zitat von: wuffwuff2003 am Juni 27, 2013, 21:28:53
Es sollen die Änderungen gespeichert werden die ich in den unterschiedlichen Dropdownboxen gemacht habe.

Bist Du Dir sicher, dass mit Deinem save-Befehl wirklich Daten in der Tabelle gespeichert werden?



Aktualisieren ist auch möglich mit:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70(das hat der access-Assi angeboten)


oder vielleicht hilft auch schon ein:

Me.Refresh
Harald
Servus

wuffwuff2003

Hallo , erstere Zeile DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70   funktioniert in Access 2010 nicht mehr, und M.Refresch ruft auch den Laufzeitfehler 2115 auf.

bahasu

Zitat von: wuffwuff2003 am Juni 28, 2013, 11:50:34
und M.Refresch ruft auch den Laufzeitfehler 2115 auf.

was auch nicht verwunderlich, da es heißt:
Me.Refresh

Wie lautet denn die Beschreibung zum Fehlercode?

Harald
Servus

wuffwuff2003

Hi, sorry Tippfehler im VBA stehts richtig  :) Hier die  Beschreibung:

Laufzeitfehler 2115: Das Makro oder die Funktion, das bzw. die für dieses Feld auf die Eigenschaft 'Vor Aktualisierung' oder 'Gültigkeitsregel' festgelegt ist, hindert Microsoft Access daran, die Daten im Feld zu speichern

Kompletter VBA Code:

Private Sub Kombinationsfeld39_BeforeUpdate(Cancel As Integer)
Cancel = MsgBox("Datensatz speichern", vbYesNo) = vbYes
If Cancel Then
DoCmd.RunCommand acCmdSaveRecord
Else
Me.Refresh
End If
End Sub


DF6GL

#20
Hallo,

die Fehlermeldung sagt es bereits:


Before_Update ist das FALSCHE (ungeeignete) Ereignis, um währenddessen Daten zu speichern....

PS:

Du tippst den Code ab??

nutze besser Copy&Paste, das gehst schneller und ohne Tippfehler, die einen in die Irre leiten (können).

Und nenne bei Fehlermeldungen  IMMER den Fehlermeldung-TEXT und nicht nur die Nummer oder sogar gar nichts..

wuffwuff2003

Ich bin hier am verzweifeln, wenn ich jetzt die Refresh unter das AfterUpdate setze funktioniert der Refresh wie er soll, und schon macht das BeforeUpdate wieder Problem, hier der VBA. Er unterbricht mit 2115 Laufzeitfehler, bei der Zeile : DoCmd.Run.......

Private Sub Kombinationsfeld39_BeforeUpdate(Cancel As Integer)
Cancel = MsgBox("Datensatz speichern", vbYesNo) = vbYes
If Cancel Then
DoCmd.RunCommand acCmdSaveRecord
Else
Undo
End If
End Sub

DF6GL

Hallo,

ja doch,   ....


wenn das Ereignis abgebrochen wird (Cancel  ist True)  , dann soll gespeichert werden, was nunmal nicht geht.....

Sagte vorhin schon, dass Before_Update nicht geeignet ist, währenddessen Daten separat zu speichern.
Du mußt die Ablauflogik ändern....

wuffwuff2003

Ok das klingt einleuchtend, wie müsste der Befehl dann sein?

wuffwuff2003

Dies wurde mir so empfohlen. Die problematik ist: Ich wähle im oberen Drop-Down meinen Namen, andere Dropdownfelder, bekommen dann die Daten passend zu dem 1. Dropdown, dem Kundennamen. Nun ändere ich bei Kunde A etwas in den übrigen Dropdownfelder, dann möchte ich zu Kunde B wechseln und schalte um, dann verhält Access nicht was ich bei Kunde A geändert habe, ausser ich gebe einen Speichernbefehl ab? Was ich schon komisch finde wieso er dies nicht verhällt ich dachte alle änderungen würden sofort in der Tabelle geändert werden und das dauerhaft.

DF6GL

#25
Hallo,


Das weiß ICH nicht, welche Ablaufsteuerung  Du verfolgst....


Warum setzt Du Cancel auf True , wenn die Frage nach "Speichern" mit Ja beantwortet wird??

Wenn Cancel = True ist,  wird eben NIX gespeichert. Die Variable "Cancel" ist ein Argument der Before_Update-Prozedur.


PS:



ZitatDies wurde mir so empfohlen.
Da hat man Dir Quatsch empfohlen, oder Du hast es missverstanden...




ZitatDie problematik ist: Ich wähle im oberen Drop-Down meinen Namen,
Was ist das "obere Dropdown"?  und was hat das mit Deinem Namen zu tun?


Zitatandere Dropdownfelder, bekommen dann die Daten passend zu dem 1. Dropdown, dem Kundennamen.
Ja, gut....  nennt sich "abhängige Kombifelder" und dienen meist zur Vorselektion für die Anzeige von Datensätzen.

ZitatNun ändere ich bei Kunde A etwas in den übrigen Dropdownfelder,
Kunde A wurde vermutlich auf Grund der o. g. Kombis gefiltert.  Was sind jetzt die "übrigen Dropdownfelder" ?  Sind das gebundene Kombis, die irgendwelche Kunden-Daten anzeigen?


Zitatdann möchte ich zu Kunde B wechseln und schalte um,
WIE schaltest Du um?  Durch andere Auswahl in den "oberen" Kombis?



Zitatdann verhält Access nicht was ich bei Kunde A geändert habe, ausser ich gebe einen Speichernbefehl ab?
Damit die vorangegangenen Änderungen gespeichert werden, braucht hier gasr nichts gemacht werden. Access speichert IMMER bei Datensatzwechsel (Schliessen des Forms ist i. Ü. auch ein "Datensatzwechsel") die DAten in die entspr. Tabelle, wenn keine Gegenmaßnahmen explizit getroffen wurden und das Form und die Steuerelemente "gebunden" sind  (Datenherkunft und Steuerelementinhalte  enthalten Tabellenname, bzw. Tabellenfeldname)



ZitatWas ich schon komisch finde wieso er dies nicht verhällt ich dachte alle änderungen würden sofort in der Tabelle geändert werden und das dauerhaft.
Du denkst ja schon richtig, vermutlich sind aber die Kombis nicht richtig eingestellt oder aber das Speichern wird durch irgendeine anderweitige Maßnahme (s. o.)  unterbunden.

wuffwuff2003

Wenn ich den Spiess umdrehe und cancel mit vbNo setze und dann unter If UNDO setzen, und den Speicherbefehl bei ELSE geht es auch nicht, dann bleibt er trotzdem bei der Speicherzeile hängen:

Private Sub Kombinationsfeld39_BeforeUpdate(Cancel As Integer)
Cancel = MsgBox("Datensatz speichern", vbYesNo) = vbNo
If Cancel Then
Undo
Else
DoCmd.RunCommand acCmdSaveRecord
End If
End Sub

wuffwuff2003

Also das obere Dropdown, ist das erste , es enthält den Namen des Kunden. Je nachdem welchen Kunde ich wähle ändern andere Dropdownfelder, und Textfelder ihren Inhalt, das sind dann die abhängigen Kombifelder. Kunde A hat bspw Schuhgrösse X(abhängiges Kombifeld)  Kunde B hat Schuhgrösse Y. Umschalten erfolgt durch Umschalten des HAUPT-DROPDOWNS also die Spitze der Pyramide sozusagen, was die Kundennamenauswahl ist.

DF6GL

Hallo,


versteh trotzdem nicht...

Ist das "obere Dropdown"   nun gebunden oder nicht?  Für eine VORAUSWAHL für weitere Kombis MÜSSEN alle diese Kombis UNGEBUNDEN sein. Sonst werden ja die Kundendaten verändert.  Ich vermute, hier liegt das ganze Schlammassel im Pfeffer.. (?? ;-) )  

Um die Kundendaten mit evtl. Kombifelder zu pflegen (Eingabe/Auswahl, Ändern)  MÜSSSEN diese Kombis GEBUNDEN sein.