Ich möchte mir "Formularvorlagen" machen. Ein Formular wird mit Grunddaten ausgefüllt und abgespeichert. Wenn ich mir die Vorlage aufrufe soll diese dupliziert und dann fertig ausgefüllt werden. Ich habe dies bis jetzt so gelöst, dass alle mit Kundennummer 9 beginnend Vorlagen sind - zb 91001 ist die erste Vorlage - dupliziert, neue Kd Nr, fertig ausgefüllt - passt. Jedoch soll es nicht passieren, dass die Vorlage überschrieben wird. Könnte man erreichen, dass alle mit Kundennummer 9 beginnend schreibgeschützt sind und vorher entsperrt werden müssen, damit man Sie bearbeiten kann? Wenn nein ev eine andere Idee wie dies lösbar wäre?
Hallo,
Formularvorlagen halt ich für verzichtbar. Zu was auch ?
Man hat ein Formular das die Daten entsprechend filtert.
Kannst Du mal den Sinn des Vorhabens besser beschreiben ?
Hallo - Ich habe Überprüfungsformulare für Gerätschaften - die Formulare geben die Prüfungsschritte vor (siehe Anhang). Für jedes Gerät ein eigenes Formular mit eigenen Prüfschritten. Diese werden nach und nach abgearbeitet. Um sich bei EINIGEN wiederholenden Varianten die Eingabe vieler Punkte zu sparen mache ich mir Vorlagen. Dann brauche ich nur noch die fehlenden Felder ausfüllen. Wie gesagt nicht immer - nicht bei allen - da wo es passt. Ich arbeite schon lange erfolgreich damit. Nur meine angefragten Punkte stören mich - es wäre toll wenn wir auf meine Fragen eingehen könnten - Danke
Hallo,
Du kannst in Abhängigkeit der 1. Ziffer der Kundennummer das Formular sperren.
Etwa so:
Private Sub Form_Current()
Me.AllowEdits = Not Left(Kundennummer,1) = "9"
End SubIm Ereignis "Beim Anzeigen" des Formulars.
Du benötigst dann noch eine Hintertüt (z.B. Funktionstaste) zum Entsperren.
Me.AllowEdits = TrueZitatev eine andere Idee wie dies lösbar wäre?
ja, mit einem normalisierten Datenmodell. Dass das Datenmodell falsch ist, lässt sich alleine aus diesem Satz ableiten:
ZitatFür jedes Gerät ein eigenes Formular mit eigenen Prüfschritten
Hier wäre Handlungsbedarf.
Die Prüfungsschritte sollten alle in eine Tabelle, der Prüfungsschritt als Datensatz mit einem Fremdschlüssel zum Gerät mit dem definiert wird für welches Gerät der Schritt zutreffend ist. Dann eine Tabelle für die eigentliche Prüfungstermine mit Fremdschlüssel zum Gerät.
In das Formular für die Prüfung kommt dann ein Button um per Anfügeabfrage die zum Gerät passenden Schritte in eine Tabelle zur Erfassung der zu erfolgenden Prüfschritte.
Dann reicht ein Formular für alle Geräte. Und Vorlagen werden auch keine benötigt weil über die Beziehungen automatisch die zum Gerät gehörenden Schritte definiert sind.
Für eine neue Prüfung wird der Datensatz angelegt und per Kombi das Gerät gewählt. Der Rest geht automatisch. Übertragen werden nur die Schlüsselfelder.
Mit einem normalisierten Datenmodell braucht es keine Vorlagen. Du würdest Dich wundern, wie einfach das alles wäre.
Danke für die Antwort. Sorry - Ich komme nicht hin. Kundennummer ist ein Fremdschlüsselfeld. Ev hängts mit dem zusammen. Ich hätte eine kleine uralte Testdatenbank angehängt - nur zum Test. Könntest du bitte nachsehen / korrigieren was ich falsch mache. Sorry, VBA ist gar nicht meine Stärke. Vielen Dank schon mal
Hi,
Zitat von: kingwambi am Mai 29, 2015, 12:42:37Sorry - Ich komme nicht hin.
schau dir doch die Datensatzherkunft des Kombifeldes einmal ganz genau an und stelle fest, welches die gebundene Spalte ist.
An die anderen Spalten des Kombifeldes kommst du über die Column-Eigenschaft, die Zählung beginnt bei 0.
Und noch ein Tipp:
Beim Testen im Unterbrechungsmodus, kannst du dir den Inhalt von Variablen und Steuerelementen ansehen.
Hallo,
ich halte das Datenmodell der Test DB für unbrauchbar. Ist die echte DB auch so (oder ähnlich) aufgebaut ?
Bist Du an einem korrekten Datenmodell interessiert ?
Übrigens, dass Datenmodell falsch ist, hat Dir Franz am 2.1.2015 schon mal mitgeteilt, hast Du aber leider kommentarlos ignoriert.
http://www.access-o-mania.de/forum/index.php?topic=19971.msg110706#msg110706
Hallo Klaus, die echte DB ist nicht so aber ähnlich aufgebaut. Die Testdatenbank ist das kleinste was ich auf die schnelle mit der passenden Größe hatte. Dass sie nicht gut ist ist mir klar, da hatten wir auch schon mal darüber gesprochen. Da ich mit meiner richtigen Datenbank schon länger erfolgreich arbeite (bis auf mein derzeitiges Problem) würde ich dies nicht gerne abändern. Mit meiner Beispieldatenbank kann ich mir aber vorstellen, wie es abzuändern ist, dass es bei mir funktioniert. Ich entschuldige mich höflichst über die Qualität der Testdatenbank.
Hallo MaggyMay, danke für deine Beteiligung! Ich nehme nund die Daten der Testdatenbank. Die gebundene Spalte ist das Feld Kundennr aus der Tabelle Kunden. Gebundene Spalte 1. Wie müsste ich dies nun fomulieren? LG Jürgen
Guten Morgen - ich habe eine neue Testdatenbank erstellt. Mit dem Fremdschlüsselfeld Kundennummer habe ich es nicht hinbekommen, aber Versuchsweise wenn im Namen Vorlage steht. Nun zu meinen Fragen:
- wie formuliere ich es damit es mit dem Fremdschlüsselfeld funktioniert
- ich bekomme beim duplizieren eine Fehlermeldung "Unzulässsige Verwendung von Null"
- wo / wie muss ich die Entsperrfunktion mit einer Funktionstaste "Me.AllowEdits = True" einrichten?
LG Jürgen
Hallo,
lies zunächst u. st. Link 1a (evtl. auch Link 1) und versuch das zu verstehen und auf Deine Datenkonstellation anzuwenden. Danach fängst Du nochmal von vorne an....
Zudem beachte die Tipps von hier: http://www.donkarl.com/?FAQ1.5
Hallo,
Zitat von: kingwambi am Mai 31, 2015, 09:13:59Die gebundene Spalte ist das Feld Kundennr aus der Tabelle Kunden. Gebundene Spalte 1.
die erste Spalte ist aber die ID und nicht das Feld "Kundennr" - deshalb sagte ich, schau es dir genau an.
Das heißt, du hättest einfach nur auf die zweite Spalte zugreifen müssen, damit die Prüfung erfolgreich ist:
Me.AllowEdits = Not Left(Kundennr_F.Column(1), 1) = "9"
Hallo Maggie May, danke für die Antwort auf meine Frage. Ich dachte es beginnt bei 0. Dann wäre 0 die ID und 1 die Kundennr. Wie müsste es nun richtig heißen? LG Jürgen
Sorry hab den Rest nicht gesehen - werde es sofort versuchen.
Hallo Maggie - es kommt die Meldung: Fehler beim Kompilieren, Methode oder Datenobjekt nicht gefunden.
Der Code:
Private Sub Form_Current()
Me.AllowEdits = Not Left(Kundennr_F.Column(1), 1) = "9"
End Sub
Hallo,
welchen Namen hat das Kombifeld das die Kundennr_F anzeigt ?
Hallo - das wars - Kombinationsfeld28 - dann ging es - Danke!
beim duplizieren kommt nun eine Fehlermeldung "Unzulässsige Verwendung von Null" - wie soll ich hier vorgehen? LG
Füge den folgenden Befehl als ersten ins Current-Ereignis ein:
If Me.NewRecord Then Exit Sub
nichts - wenn ich den (Schreibschutz)Code lösche geht's wieder - LG
Ich hatte meine Antwort nochmal geändert - falls du es nicht bemerkt hast, s.o.
Hallo - ja hab ich übersehen - Danke. So richtig? Wenn ja, dann kommt
"Der Befehl oder die Aktion einfügen ist zurzeit nicht verfügbar" - aber nur beim gerade schreibgeschützten.
Private Sub Form_Current()
If Me.NewRecord Then Exit Sub
Me.AllowEdits = Not Left(Kombinationsfeld28.Column(1), 1) = "9"
End Sub
Dann musst du halt den Schreibschutz vor dem Kopieren aufheben oder das Kopieren in dem Fall unterbinden.
Datensätze mit Kundenummer beginnend 9 sollen nicht geändert werden können - darum der Schreibschutz. Erst nach dem duplizieren soll das neu erstellte beliebig geändert werden können.
Welche Idee hättest du hierfür?
ich hab vor den Befehl "Me.AllowEdits = True" gesetzt - das funktioniert nun. Ich meld mich gleich wegen meinem nächsten Problem, das sich sicher gleich zeigt. Danke- LG
Also musst du vor dem Kopieren den evtl. vorhandenen Schreibschutz entfernen.
Aber ändern kannst du den Datensatz nicht, weil die Kundennummer weiterhin mit 9 beginnt, da musst du dir also noch etwas anderes ausdenken.
Hi - nein funktioniert perfekt. Dem neuen Datensatz kann ich nach dem duplizieren eine andere Kundennummer geben und weiter bearbeiten. Das einzige was mir nun noch fehlt ist wie ich den Schreibschutz per Funktionstaste aufheben könnte. Danke - LG
Wie du den Schreibschutz aufhebst weißt du doch, was genau ist dein Problem?
Übrigens ist der Schreibschutz direkt nach dem Kopieren noch gar nicht wieder gesetzt, du kannst also sofort ändern - aber auch nur dann.
Hallo - ich möchte zb mit der F3 Taste den Schreibschutz aufheben. Wie formuliere ich dies? LG
Hallo - was an dem Code zum entsperren mit der F3 Taste stimmt nicht? LG Jürgen
Private Sub Form_Current()
If Me.NewRecord Then Exit Sub
Me.AllowEdits = Not Left(Kundennr.Column(1), 1) = "9"
Application.OnKey "{F3}", "Me.AllowEdits = True"
End Sub
Hi,
Zitatwas an dem Code [...] stimmt nicht?
was sagt denn der Compiler dazu?! ;-)
Zur Belegung von Tasten mit Befehlen erstellt man ein Makro mit dem Namen "AutoKeys". Näheres dazu sollte sich in der Access-Hilfe finden lassen.
Hallo - sorry aber da ich mit Makros noch weniger Erfahrung habe als mit VBA muss ich für dich bescheuerte Fragen stellen. Ich habe in der Hilfe, in Google und Youtube gesucht bin aber für mich nicht wirklich fündig geworden, da ja das AllowEdits nirgends hinterlegt ist. Ich hoffe du hilfst mir hier weiter. Ich habe das was ich gemacht habe als Bild angehängt. Wie würde es richtig aussehen - Danke
Hallo,
das kannst Du Dir alles sparen, das ist relativ einfach auch ohne Makros und Autokey.
Hinterlege im Formularereignis "Bei Taste" folgenden Code:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 25 Then '25 = F3
Me.AllowEdits = True
MsgBox "Datensatz ist freigegeben"
End If
End Sub
Achtung, die Formulareigenschaft "Tastenvorschau" muss auf Ja stehen.
Hallo Klaus, wenn ich das einfach in die Zeile reinkopiere (Ausdrucksgenerator) dann bekomme ich die Meldung, dass das Objekt nicht gefunden wurde. Wenn ich Codegenerator nehme und dies einfüge bekomme ich keinen Fehler es tut sich aber nichts wenn ich die F3 Taste drücke. Was mache ich falsch? LG Jürgen
Hallo,
das ist VBA Code, der hat im Ausdrucksgenerator nichts zu suchen.
Ereignis wählen, Code reinkopieren.
Steht dann [Ereignisprozedur] in der Zeile ?
Wird die MsgBox angezeigt ?
Ist die Tastenvorschau des Formulars auf Ja gestellt ?`
Hallo - hab ein Bild angehängt. Es steht Ereignisprozedur drinnen. Die MSG Box wird nicht angezeigt - entsperrt auch nicht. Tastenvorschau ist auf Ja.
Hi,
der Code stimmt nicht, verwende besser die VBA-Konstante vbKeyF3.
es dürfte an der 25 liegen. ich habe mal 114 versucht - dann lässt es sich mit der Taste "R" entsperren. Was könnte es für F3 geben?
So? dann entsperrt er auf jede Taste die ich drücke.
Private Sub Form_KeyPress(KeyAscii As Integer)
If vbKeyF3 Then
Me.AllowEdits = True
MsgBox "Datensatz ist freigegeben"
End If
End Sub
Der Vergleich mit der Eingabe muss natürlich drin bleiben!
sorry das sagt mir jetzt nichts. könntest du mir bitte den code senden - danke
So wahrscheinlich - mit F3 geht's aber auch nicht - mit ESC zb schon - hättest du eine Idee?
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyF3 Then
Me.AllowEdits = True
MsgBox "Datensatz ist freigegeben"
End If
End Sub
If KeyAscii = vbKeyF3
Hättest du noch eine Idee wieso es mit Escape geht und mit F3 nicht?
Hallo,
bei mir funktioniert das mit der 25.
Lasse Dir mal mit einer Msgbox KeyAscii ausgeben.
?vbKeyF3 im Direktbereich ergibt 114, aber auf die 114 abgefragt geht es nicht.
Bin im Moment ratlos, das habe ich schon öfter gemacht.
Hallo - ich werde es bei der ESC Taste belassen - ist mir schon lieber als die F3. Ich möchte mich recht herzlich für die Hilfestellung und die Geduld mit mir bei allen Beteiligten bedanken. Da nun (hoffentlich) alles abgearbeitet ist werde ich den Thread schließen. LG Jürgen
Sorry, wenn ich das noch anfüge, aber die Escape-Taste halte ich für ziemlich ungeeignet, da sie doch in der Regel für das Abbrechen eines Vorgangs bzw. einer Aktion eingesetzt wird.
Bei einem Test hat sich herausgestellt, dass das KeyPress-Ereignis durch F3 gar nicht ausgelöst wird. ???
Funktionieren tut aber folgendes:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF3 Then Me.AllowEdits = True
End Sub
BTW:
KeyAscii und KeyCode ist offensichtlich nicht dasselbe.
Guten Morgen, schläfst du denn nie? Danke dass du dir (um die Zeit) noch gedanken darüber gemacht hast ;D!! Bist die Beste :-*! Ich habe es noch um die MSG Box erweitert - funktioniert perfekt. Wünsche dir noch einen wunderschönen Tag. LG Jürgen
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF3 Then
Me.AllowEdits = True
MsgBox "Datensatz ist freigegeben"
End If
End Sub
Hi,
Zitatschläfst du denn nie?
aber sicher doch, bspw. morgens um sieben! :-)