Hallo zusammen,
ich bin Access Einsteiger und hoffe auf euren Rat!
Es sollen 25 Formulare rein zum direkten Ausdruck angelegt werden. (spätere Nutzung der Daten nicht ausgeschlossen aber soll kurzfristig nicht kümmern).
Zur leichteren Handhabung soll ein kleineres Formular zu Beginn eines der Formulare auswählen und zusätzlich einen Benutzernamen hinzufügen.
Die Formulare einzeln mit ner provisorischen Datenbank dahinter bekomm ich hin aber nicht den Clou mit der Vorauswahl des richtigen Formulares...
Ich hoffe Ihr könnt mir kurz Helfen, ich habe viel im Internet und hier rumgesucht, vielleicht hab ich auch nur nach den falschen Schlagwörter gesucht.
Vielen Dank!
Hallo,
eines vorweg, Formulare sind zum Ausdrucken ungeeignet. Ausdrucke erfolgen über Berichte.
25 Formulare sind schon heftig. Wieso hast Du 25 Formulare ?
Wie unterscheiden sich die Formulare ?
Wie kommen denn die Daten in die Formulare ?
Welche Tabelllen gibt es denn ?
Eine Datenbank besteht im Regelfall aus mehreren Tabellen. Und eine Tabelle ist noch lange keine Datenbank.
Es geht um Retourenaufnahme, eine Mitarbeiterin soll möglichst im Vollbildmodus im ersten Eingabefenster ihren Namen und den Kunden angeben und bekommt im zweiten Schritt das passende Formular (das eben genau so aussehen muss und immer leicht variiert) ausgespuckt. Sie tippt die Daten (Artikel, Datum, Zustand, aber auch Kundenspezifische Infos) ein und das Dokument wird gedruckt.
Ich weiß es ist keine klassische Access Anwendung, gerade weil die Daten dahinter weniger relevant sind. Aber ist sowas dann überhaupt möglich?
Danke schonmal!
Hallo,
wie unterscheiden sich die Formulare, wieso müssen das 25 Formulare sein ?
Welches Dokument wird gedruckt, das Formular ?
Dass Formulare zum Drucken nicht geeignet sind hast Du gelesen ?
Im Grunde hast Du keine meiner Fragen hinreichend beantwortet.
Wahrscheinlich geht das alles viel einfacher, in dem man
ein Formular auf die gewünschten Daten filtert.
Zitat(das eben genau so aussehen muss und immer leicht variiert)
Das ist auch irreführend, entweder es sieht genau so aus, oder es variiert.
Worin besteht die Variation ?
Hi,
entschuldige meine unklare Antwort, aber danke für die Mühe bisher. Ich versuche mich genauer auszudrücken
Die Formulare unterscheiden sich in Format (Kopfzeile, Aufbau) und Eingabefeldern. Insgesamt werden ca. 15 bis 20 Felder abgefragt, von denen aber nur 6 immer identisch sind. Die eingegebenen Daten müssen nicht gespeichert werden.
Das auszufüllende Formular soll genauso gedruckt werden wie es bei der Eingabe sichtbar ist. Deswegen dachte ich, dass man evtl den Weg über die Berichte weglassen könnte, da ich faktisch ja einen Zettel im richtigen Format gedruckt habe nachdem ich den Druck-Button eingebaut und ausprobiert habe.
Vielleicht hilft die Erklärung der Ist-Situation.
Eine Dame steht vor einem Paket in der Retourenabteilung, sie holt sich den passenden Zettel und füllt ihn per Hand mit einem Kugelschreiber aus.
Da das sehr oft am Tag vorkommt und auch leicht Fehler passieren soll eine Eingabemaske die Arbeit erleichtern. Sie wählt ihren Namen und das Formular; es erscheint (ihr Name und das aktuelle Datum werden übernommen) und sie füllt die restlichen Felder aus. Sie drückt auf "Drucken", unterschreibt und ist fertig.
Habe mir überlegt dass man Adress- und Artikeldaten einpflegen könnte, aber das übersteigt meine momentanten Kompetenzen sehr, daher suche erstmal ich eine sehr einfache Lösung.
zu den Tabellen: Ich habe zwei Tabellen angelegt, eine für die Adressdaten und eine für die Artikel mit den einzelnen Eigenschaften. Da diese Daten aber garnicht mehr benutzt werden dachte ich, dass man hier weniger eine Datenbank aufbaut als nur die möglichkeiten von Access als Eingabe- und Druck-Tool nutzt.
beste Grüße
Hallo,
Zitat(das eben genau so aussehen muss und immer leicht variiert)
hast Du da wirklich dann 25 unterschiedliche Formate ?
Wenn die Daten in 2 Tabellen stehen, sollten sich doch die Formulare vereinheitlichen lassen.
Formulare die nicht in Tabellen speichern, halte ich für unbrauchbar.
Willst Du immer alles noch mal eingeben, wenn z.B. ein Eingabefehler gemacht wurde ?
Hallo,
ZitatEs sollen 25 Formulare rein zum direkten Ausdruck angelegt werden. (spätere Nutzung der Daten nicht ausgeschlossen aber soll kurzfristig nicht kümmern).
Zur leichteren Handhabung soll ein kleineres Formular zu Beginn eines der Formulare auswählen und zusätzlich einen Benutzernamen hinzufügen.
Erstelle die 25 Formulare mit einem verwendbaren Sonderzeichen am Anfang des Namens (z. B. "~Druckformular1")
Erstelle das "EingabeMaske"-Formular wie nachstehend beschrieben und ohne das Sonderzeichen im Namen ("frmStart").
Lege diese Tabelle an: (Tabellen tblKunden, tblArtikel bleiben erst mal außen vor)
tblBenutzer:
BenutzerID (Autowert, Primärschlüssel)
Benutzer_Vorname (Text)
Benutzer_Nachname (Text)
... evtl weitere Felder zum Benutzer
In frmStart kommen diese Steuerelemente:
Kombifeld "cmbBenutzer":
Steuerelementinhalt: leer
Datensatzherkunft: Select BenutzerID, Benutzer_Nachname from tblBenutzer order by Benutzer_Nachname
gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0cm; 4cm
Kombifeld "cmbFormulare"
Steuerelementinhalt: leer
Datensatzherkunft: Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~"
gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0cm; 6cm
mit Ereignisprozedur "Nach Aktualisierung" dieses Kombis:
Private Sub cmbFormulare_AfterUpdate()
DoCmd.OpenForm Me!cmbFormulare, , , , , , Me!cmbBenutzer
End SubIn jedem "Druckformular" ein Textfeld "txtBenutzer" zur Anzeige des Benutzers und die nachstehende Ereignisprozedur:
Private Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!txtBenutzer = Me.OpenArgs
End Sub
Zitat von: MzKlMu am Dezember 29, 2015, 13:37:48
ZitatFormulare die nicht in Tabellen speichern, halte ich für unbrauchbar.
Willst Du immer alles noch mal eingeben, wenn z.B. ein Eingabefehler gemacht wurde ?
Ich halte das auch nicht für eine saubere Lösung, allerdings sind das genau die Vorgaben. Die Zettel werden nach Vorgaben physisch genauso benötigt. Kann ich auch nichts machen.
Wäre interessant im Nachgang die Daten zu erfassen und zu Nutzen, soll aber im ersten Schritt nicht passieren. Da müsste dann vielleicht auch eine fähigere Person als ich dran. Aber dank dir soweit!
Zitat von: DF6GL am Dezember 29, 2015, 13:45:54
Hallo,
Erstelle die 25 Formulare mit einem verwendbaren Sonderzeichen am Anfang des Namens (z. B. "~Druckformular1")
Erstelle das "EingabeMaske"-Formular wie nachstehend beschrieben und ohne das Sonderzeichen im Namen ("frmStart").
Vielen Dank für deine praktische Hilfe, ich versuch gerade das genauso nachzubasteln und melde mich dann zurück!!! :)
Danke nochmal DF6GL!
Also das sieht soweit ganz gut aus hab jetzt erstmal meine Mühe die ganzen Formulare einzupflegen...
wie kann man das ganze nun öffnen dass man nur die Eingabefenster sieht?
Grüße,
Julian.
Zitat von: DF6GL am Dezember 29, 2015, 13:45:54
Hallo,
ZitatEs sollen 25 Formulare rein zum direkten Ausdruck angelegt werden. (spätere Nutzung der Daten nicht ausgeschlossen aber soll kurzfristig nicht kümmern).
Zur leichteren Handhabung soll ein kleineres Formular zu Beginn eines der Formulare auswählen und zusätzlich einen Benutzernamen hinzufügen.
Erstelle die 25 Formulare mit einem verwendbaren Sonderzeichen am Anfang des Namens (z. B. "~Druckformular1")
Erstelle das "EingabeMaske"-Formular wie nachstehend beschrieben und ohne das Sonderzeichen im Namen ("frmStart").
Kombifeld "cmbFormulare"
Steuerelementinhalt: leer
Datensatzherkunft: Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~"
gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0cm; 6cm
mit Ereignisprozedur "Nach Aktualisierung" dieses Kombis:
Private Sub cmbFormulare_AfterUpdate()
DoCmd.OpenForm Me!cmbFormulare, , , , , , Me!cmbBenutzer
End Sub
Ich sehe die Formulare im Kombinationsfeld, wie passiert jetzt der "Sprung" ins richtige Formular?
Danke!!!
Vielen Dank für die fachkundige Hilfe!
Hallo,
der Sprung passiert dann, wenn ein Formular im Kombifeld ausgewählt wird(wurde), d. h. das Ereignis "Nach Aktualisierung" auftritt.
Voraussetzung ist das korrekte Anlegen der Ereignisprozedur... (In Kombi-Eigenschaften/Ereignisse/Nach Aktualisierung auf die rechts liegenden 3 Pünktchen klicken, Code-Generator wählen und im VBA-Editor in den Prozedurrumpf den restlichen angegebenen Code einbauen.
Zitat von: DF6GL am Dezember 29, 2015, 17:24:04
Hallo,
der Sprung passiert dann, wenn ein Formular im Kombifeld ausgewählt wird(wurde), d. h. das Ereignis "Nach Aktualisierung" auftritt.
Voraussetzung ist das korrekte Anlegen der Ereignisprozedur... (In Kombi-Eigenschaften/Ereignisse/Nach Aktualisierung auf die rechts liegenden 3 Pünktchen klicken, Code-Generator wählen und im VBA-Editor in den Prozedurrumpf den restlichen angegebenen Code einbauen.
Hatte mich an einer Stelle vertippt beim Namen, nun klappt es wunderbar! Vielen vielen Dank nochmal!
Eine andere Sache noch zu der ich im Cyberspace keine zufriedenstellende Antwort gefunden habe...
Es ist ja möglich die Sichtbarkeit eines Bereiches an Bedingungen zu knüpfen. Kann man einen Bereich im Formular unsichtbar machen aber im Druck sichtbar?
viele Grüße
Hallo,
wüsste nicht, wie...
ZitatFormulare sind zum Ausdrucken ungeeignet. Ausdrucke erfolgen über Berichte.
Zitat von: DF6GL am Dezember 30, 2015, 11:44:48
Hallo,
wüsste nicht, wie...
ZitatFormulare sind zum Ausdrucken ungeeignet. Ausdrucke erfolgen über Berichte.
Habs hinbekommen, falls es jemand mal brauchen sollte gibt es bei Textfeldern unter Format die Option "Anzeigen" in der man die entsprechende Operation findet!
Zitat von: DF6GL am Dezember 29, 2015, 13:45:54
Hallo,
In jedem "Druckformular" ein Textfeld "txtBenutzer" zur Anzeige des Benutzers und die nachstehende Ereignisprozedur:
Private Sub Form_Load()
If Not IsNull(Me.OpenArgs) Then Me!txtBenutzer = Me.OpenArgs
End Sub
Hey DF6GL ,
ich nochmal mit kurzer Frage: in dem Textfeld wird nur die Indexzahl ausgegeben, nicht der Name. Was muss ich ändern damit die richtige Information ausgegeben wird?
vielen Dank und beste Grüße
Julle
Hallo,
wenn der Benutzername im Auswahlkombi in der 2. Spalte der Kombiliste steht, dann halt diesen Spaltenwert übergeben:
DoCmd.OpenForm Me!cmbFormulare, , , , , , Me!cmbBenutzer.Column(1)
Eine weitere Sache noch:
kann man die Auswahlmöglichkeiten des Kombifelds "cmbFormulare" im Formular "frmStart" abhängig vom Benutzer gestalten?
Also wenn Benutzer "Hans" seinen Namen in "cmbBenutzer" auswählt hat er andere Auswahlmöglichkeiten (Formulare) als Benutzer "Otto".
vielen Dank für die Hilfe bisher!
viele Grüße,
Julian
Hallo Julian,
selbstverständlich kann man das machen, aber dazu musst du dir erstmal überlegen wie du das steuern willst, d.h. wonach willst du entscheiden, welche Formulare für welchen Benutzer angeboten werden? Man könnte dazu Tabellen einsetzen, die Benutzer evtl. auch noch Gruppen zuordnen, die Formulare entsprechend benennen...
Wie also stellst du dir das vor?
Zitat von: MaggieMay am Januar 14, 2016, 15:47:52
Hallo Julian,
selbstverständlich kann man das machen, aber dazu musst du dir erstmal überlegen wie du das steuern willst, d.h. wonach willst du entscheiden, welche Formulare für welchen Benutzer angeboten werden? Man könnte dazu Tabellen einsetzen, die Benutzer evtl. auch noch Gruppen zuordnen, die Formulare entsprechend benennen...
Wie also stellst du dir das vor?
Ich stelle mir das folgendermaßen vor:
ich habe ja bereits die Tabelle mit den Benutzern, da steht ja bisher nur der Name drin. Da würde ich gerne das Kriterium "Abteilung" hinterlegen. Nun müssen die Formulare den "Abteilungen" zugeordnet werden. Aber wie das funktioniert weiß ich nicht genau...
Also brauchst du eine Tabelle mit den Formularen und eine weitere für die Zuordnung Formular - Abteilung.
Mit Hilfe einer Abfrage kannst du dann die Formulare der Abteilung des aktuellen Benutzers auslesen.
Zitat von: MaggieMay am Januar 14, 2016, 16:16:08
Also brauchst du eine Tabelle mit den Formularen und eine weitere für die Zuordnung Formular - Abteilung.
Mit Hilfe einer Abfrage kannst du dann die Formulare der Abteilung des aktuellen Benutzers auslesen.
Ja so weit bin ich vom Kopf her, aber leider scheitere ich an der technischen umsetzung... Wie ordne ich das in bestehendes Gefüge ein? da muss ich ja jetzt bei dem cmbFormular nochwas reinpacken, aber bin mir unsicher was!
Das Kombifeld braucht als Datensatzherkunft die besagte Abfrage.
Vorher musst du aber die Hilfstabellen anlegen und mit Inhalten füllen.
Die Abfrage könnte dann bspw. so aussehen:
Select f.formName From tblFormulare As f Inner Join tblFormZuAbt As z ON f.Abt = z.Abt
Where z.User = getCurrentUser()
wobei der aktuelle Benutzer über die selbst definierte Funktion "getCurrentUser" in die Abfrage geholt wird.
Zitat von: MaggieMay am Januar 14, 2016, 17:18:44
Das Kombifeld braucht als Datensatzherkunft die besagte Abfrage.
Vorher musst du aber die Hilfstabellen anlegen und mit Inhalten füllen.
Die Abfrage könnte dann bspw. so aussehen:
Select f.formName From tblFormulare As f Inner Join tblFormZuAbt As z ON f.Abt = z.Abt
Where z.User = getCurrentUser()
wobei der aktuelle Benutzer über die selbst definierte Funktion "getCurrentUser" in die Abfrage geholt wird.
das hilft mir schonmal, allerdings hat besagtes Kombifeld ja schon eine Datensatzherkunft:
Kombifeld "cmbFormulare"
Steuerelementinhalt: leer
Datensatzherkunft: Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~"
gebundene Spalte: 1
Spaltenanzahl: 2
Spaltenbreiten: 0cm; 6cm
wobei ich mich auch frage, für was die -32768 steht
Hi,
Zitatallerdings hat besagtes Kombifeld ja schon eine Datensatzherkunft
nun, wenn du die Formularauswahl benutzerabhängig steuern willst, reicht es nicht mehr die Systemtabelle auszulesen, das sollte eigentlich klar sein.
Zitatwobei ich mich auch frage, für was die -32768 steht
Das sollte sich herausfinden lassen, wenn du dir die Tabelle einfach mal genauer anschaust.
PS:
Was willst du denn wohl mit dem Ergebnis dieser Abfrage anfangen:
Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~" ???
Insbesondere wenn man bedenkt, dass lediglich die zweite Spalte der Abfrage zur Ansicht kommt!
Hallo Maggie,
ZitatPS:
Was willst du denn wohl mit dem Ergebnis dieser Abfrage anfangen:
Code: [Auswählen]
Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~"
Siehe #6
gruss ekkehard
Ok, die Frage hätte dann wohl an Franz gehen müssen - ala "Was hast du dir dabei gedacht?"! Aber es hätte doch inzwischen auch dem Fragesteller schon aufgefallen sein müssen, dass bei den vorgegebenen Einstellungen im Kombifeld stets nur die Tilde zur Anzeige kommt, anstelle des Formularnamens. Welchen Sinn mag das denn wohl haben?
BTW:
Ausgerechnet die Tilde als Kennzeichen zu wählen halte ich für eher ungünstig, da dieses Zeichen von Access intern für temporäre Objekte vergeben wird. Normalerweise wählt man also genau die Objekte aus, die nicht mit einer Tilde beginnen.
Hallo,
zur Tilde:
geschrieben habe ich:
ZitatErstelle die 25 Formulare mit einem verwendbaren Sonderzeichen am Anfang des Namens (z. B. "~Druckformular1")
Select Name, Left(Name,1) from MSysObjects where Type =-32768 and Left(Name,1) ="~"
wobei sich beim Select ein Fehler eingeschlichen hat (sorry) und es so heißen sollte:
Select Name, Mid(Name,2) from MSysObjects where Type =-32768 and Left(Name,1) ="~
Stimmt schon, das das Tilde-Zeichen auch von internen (und evtl. auch temporären) Objekten verwendet wird. Das ist aber kein "reserviertes" Zeichen, und bei Formularen ist mir das noch nicht begegnet. Bei anderen Sonderzeichen meckert Access öfter mal, sprich will es nicht akzeptieren.
Zum Problem (vermutlich aber eh schon geklärt):
Letztendlich kann man aber ganz auf ein Sonderzeichen verzichten, wenn man die betroffenen Formulare, die im Kombifeld auftauchen sollen, halt anderweitig strukturiert und filterbar benennt, d. h. kennzeichnet, z. B:
D_Druckformular1
D_Druckformular2
so dass es dann so lauten muss:
Select Name, Mid(Name,3) from MSysObjects where Type =-32768 and Left(Name,2) ="D_"
Spaltenanzahl: 2
Spaltenbreite: 0cm; 4cm
Hallo,
Vielleicht sollte man da lieber auf eine eigene Tabelle für die Formulare zurück greifen. Da lässt sich dann auch eine n:m zwischen diese und die MA-Tabelle schalten (ich weiss nicht ob das mit Systemdateien auch geht), die dann als RowSource des Kombis dient.
gruss ekkehard
Hi,
Zitat von: Beaker s.a. am Januar 17, 2016, 18:38:04
Vielleicht sollte man da lieber auf eine eigene Tabelle für die Formulare zurück greifen.
Dazu würde ich eher nicht raten, wenn es sich vermeiden lässt.
ZitatDa lässt sich dann auch eine n:m zwischen diese und die MA-Tabelle schalten (ich weiss nicht ob das mit Systemdateien auch geht)
Sicher nicht.
Zitat von: MaggieMay am Januar 16, 2016, 23:55:14
Ok, die Frage hätte dann wohl an Franz gehen müssen - ala "Was hast du dir dabei gedacht?"! Aber es hätte doch inzwischen auch dem Fragesteller schon aufgefallen sein müssen, dass bei den vorgegebenen Einstellungen im Kombifeld stets nur die Tilde zur Anzeige kommt, anstelle des Formularnamens. Welchen Sinn mag das denn wohl haben?
BTW:
Ausgerechnet die Tilde als Kennzeichen zu wählen halte ich für eher ungünstig, da dieses Zeichen von Access intern für temporäre Objekte vergeben wird. Normalerweise wählt man also genau die Objekte aus, die nicht mit einer Tilde beginnen.
Das stimmt so nicht, es ist sehr wohl zu sehen um welches Druckformular es sich handelt. Jeweils Tilde+Formularname.
Die Bedingung welcher Benutzer welches Formular sieht werd ich erstmal auslassen, die erste Version wird erstmal getestet.
Wobei ich noch einen Kniff nicht herausbekomme, auch nach durchforsten des Internets nicht...
Ich möchte das Formular an zwei unterschiedliche Drucker senden. Über die Druckeinstellungen werd ich nicht schlauer, es scheint wohl einen Druckerpool zu geben, der lässt sich allerdings von mir (und meinen Berechtigungen am PC) nicht weiter bedienen.
Gibt es ein VBA Makro was diesen Job erledigen kann? ich hab geschaut und versucht, bekomme es allerdings nicht gebacken!
Hallo,
welche "Druckeinstellungen" meinst Du ?
Das aktuell angezeigte Formular kann manuell über Datei/Drucken und dort unter Auswahl eines installierten Druckers gedruckt werden.
Wenn das Drucken via VBA erfolgen soll, so wird ohne weitere Maßnahmen der als Standard eingerichtete Drucker benutzt.
Wenn ein bestimmter Drucker benötigt wird, so gibt es dafür die Printers-Auflistung oder man stellt den Standarddrucker um.
Siehe http://www.donkarl.com/?FAQ5.1
Zitat von: DF6GL am Januar 18, 2016, 11:56:53
Hallo,
welche "Druckeinstellungen" meinst Du ?
Das aktuell angezeigte Formular kann manuell über Datei/Drucken und dort unter Auswahl eines installierten Druckers gedruckt werden.
Wenn das Drucken via VBA erfolgen soll, so wird ohne weitere Maßnahmen der als Standard eingerichtete Drucker benutzt.
Wenn ein bestimmter Drucker benötigt wird, so gibt es dafür die Printers-Auflistung oder man stellt den Standarddrucker um.
Siehe http://www.donkarl.com/?FAQ5.1
Ich meinte damit, dass zwei Drucker gleichzeitig angesteuert werden sollen.
Sicher nicht gleichzeitig sondern wahlweise, oder?
Zitat von: MaggieMay am Januar 18, 2016, 12:08:22
Sicher nicht gleichzeitig sondern wahlweise, oder?
Beim betätigen des Druck-Buttons sollen zwei Druckaufträge angestoßen werden bzw ein Auftrag an zwei Drucker parallel.
Die Drucker sind im gleichen Netzwerk aber 500m voneinander entfernt. Im Moment wird die Strecke jedesmal gelaufen...
Hallo,
das heißt doch, nacheinander auf zwei verschiedene Drucker ausgeben.. Das kannst Du mit den beschriebenen Methoden doch machen.. Wo ist das Problem?
PS:
Zitat.. bzw ein Auftrag an zwei Drucker parallel.
Kannst Du parallel (gleichzeitig) mit zwei Autos fahren??
Hallo Maggie,
Wieso nicht? Auf eigene Tabellen habe ich vollen Zugriff.
Und wenn ich die SystemTabelle nicht für eine n:m verwenden kann,
kann ich auch nicht mehreren MA mehrere Formulare anbieten; - oder habe ich da was übersehen?
gruss ekkehard
Hallo,
wenn sich dein Post hierauf bezieht:
ZitatZitatDa lässt sich dann auch eine n:m zwischen diese und die MA-Tabelle schalten (ich weiss nicht ob das mit Systemdateien auch geht)
Sicher nicht.
so weiß ich jetzt auch nicht mehr, was ich mir dabei gedacht habe. ;-)
Zumindest per Abfrage sollten sich die Tabellen in Beziehung setzen lassen.
Hallo Maggie,
Zitatso weiß ich jetzt auch nicht mehr, was ich mir dabei gedacht habe. ;-)
Mach dir nichts draus, - kenn' ich ;-)
Zitat
Zumindest per Abfrage sollten sich die Tabellen in Beziehung setzen lassen.
Hm, kann man mit einer Abfrage eine n:m nachbilden?
gruss ekkehard
Das sollte gehen, aber...
Du hast doch auf der einen Seite die selbst definierte User-Tabelle und die Zwischentabelle mit User und Formular. Die Systemtabelle brauchst du danach doch eigentlich gar nicht mehr, sondern nur für die Einrichtung der Zuordnung, bspw. via Kombifeld.
Allerdings könnte ich mir auch eine andere Grundlage für die Herstellung der Zuordnungen vorstellen, nämlich die Documents-Auflistung der Formulare. Dort könnten nämlich auch Beschreibungstexte hinterlegt werden (so wie man sie im ehemaligen Datenbankfenster immer so schön zu sehen bekam), die man zusätzlich zu den Formularnamen auslesen könnte.
Hallo Maggie,
ZitatDu hast doch auf der einen Seite die selbst definierte User-Tabelle und die Zwischentabelle mit User und Formular. Die Systemtabelle brauchst du danach doch eigentlich gar nicht mehr, sondern nur für die Einrichtung der Zuordnung, bspw. via Kombifeld.
Ist doch mein reden seit 1870 ;-) - eine eigene Tabelle mit den Formularnamen, wovon Du abgeraten hattest, worauf hin ich gefragt hatte warum. Und da brauch ich die Systemtabelle eben NICHT, womit wir uns eigentlich einig wären.
gruss ekkehard
Ich würde wie gesagt die Systemtabelle dafür einsetzen, die Formulare in die Verknüpfungstabelle einzufügen.
Bleibt allerdings der Haken, dass es keine automatische Aktualisierung gibt, wenn ein Formular gelöscht oder umbenannt wird.
Hallo Maggie,
ZitatIch würde wie gesagt die Systemtabelle dafür einsetzen, die Formulare in die Verknüpfungstabelle einzufügen.
O.K., zum Einfügen per Combo ist der Rückgriff natürlich kein Problem.
Und man kann auch per Abfrage eine n:m nachbilden:
SELECT MSysObjects.Name, UserFormulare.SysFormID, User.UserID
FROM (MSysObjects
INNER JOIN UserFormulare
ON MSysObjects.Id = UserFormulare.SysFormID)
INNER JOIN [User]
ON UserFormulare.UserID = User.UserIDUserFormulare ist die Zwischentabelle.
ZitatBleibt allerdings der Haken, dass es keine automatische Aktualisierung gibt, wenn ein Formular gelöscht oder umbenannt wird.
Tja, Relations mit RI sind mit Sys-Tabellen wohl nicht möglich. Ausser man weiss wie man die Fehlermeldung bezügl. Zugriffsrechten "ausschaltet".
gruss ekkehard
Zitat von: DF6GL am Januar 18, 2016, 12:23:25
Hallo,
das heißt doch, nacheinander auf zwei verschiedene Drucker ausgeben.. Das kannst Du mit den beschriebenen Methoden doch machen.. Wo ist das Problem?
PS:
Zitat.. bzw ein Auftrag an zwei Drucker parallel.
Kannst Du parallel (gleichzeitig) mit zwei Autos fahren??
Hintereinander erledigt den Job auch, aber ich hab eigentlich vor, nur einmal den Drucken-Knopf zu drücken.
Hieße ich muss Befehle hinterlegen für: einmal Drucken, Drucker wechseln, Drucken, Drucker auf Standart zurückstellen.
Die VBA Formulierungen für Drucken, Drucker welchseln sind beschrieben, aber wie verknüpfe ich, dass der zweite Druck angestoßen wird?
Im Moment wird das drucken bei positiver Überprüfung nach "Else" angestoßen.
...hoffe ich habe mich verständlich ausgedrückt
ZitatIm Moment wird das drucken bei positiver Überprüfung nach "Else" angestoßen.
Dort kannst du doch beliebig viele Befehle einfügen, wo genau liegt das Problem?
Hallo,
ZitatDie VBA Formulierungen für Drucken, Drucker welchseln sind beschrieben, aber wie verknüpfe ich, dass der zweite Druck angestoßen wird?
Im Moment wird das drucken bei positiver Überprüfung nach "Else" angestoßen.
Nun, Du spricht sehr unklar....
Wenn Du z. B. direkt nach Auswahl eines Formulars im letzthin diskutierten Kombi den Druck dieses Forms anstoßen willst, dann geht als eine Möglichkeit das prinzipiell so:
Sub cmbFormAuswahl_Afterupdate()
Docmd.Openform Me!cmbFormAuswahl
Docmd.Printout 'Audruck auf Standarddrucker
' hier Code zum Wechseln des (Standard)druckers siehe http://www.donkarl.com/?FAQ5.1
Docmd.Printout 'nochmal Ausdruck auf den neuen Standarddrucker
Docmd.Close acform, Me!cmbFormAuswahl
' hier evtl Drucker wieder zurücksetzen.
End Sub
Dim strPrinterOld As String
DoCmd.RunCommand acCmdPrint
strPrinterOld = Application.Printer.DeviceName
Application.Printer = Application.Printers("NameEinesAnderenDruckers")
DoCmd.RunCommand acCmdPrint
Application.Printer = Application.Printers(strPrinterOld)
so ist mein Ansatz aber er druckt im moment zweimal auf den gleichen Drucker. Liegt es am Druckernamen (zumal alles Netzwerkdrucker sein sollen)?
Entschuldigt meine Ausdrucksweise, aber arbeite daran ;)
Hi,
teste das mal im Unterbrechungsmodus und mache eine kleine Pause vor dem zweiten Print, um zu sehen, ob der Code evtl. schneller ist als der Drucker. ;-)
Zitat von: MaggieMay am Januar 21, 2016, 17:11:18
Hi,
teste das mal im Unterbrechungsmodus und mache eine kleine Pause vor dem zweiten Print, um zu sehen, ob der Code evtl. schneller ist als der Drucker. ;-)
wie funktioniert das mit dem Unterbrechen? habe versucht per F9 eine Unterbrechung hinzuzufügen, das ist aber "nicht zulässig" in dieser Zeile.
Hallo,
ich denke eher, dass meine Codezeilen nicht richtig abgelesen wurden... 8)
(und evtl. der Druckername nicht genau stimmt. Unter Geräte und Drucker und den Eigenschaften des bestimmten Druckers den Namen per Copy&Paste in den Code übertragen)
Zitat von: DF6GL am Januar 21, 2016, 17:37:40
Hallo,
ich denke eher, dass meine Codezeilen nicht richtig abgelesen wurden... 8)
(und evtl. der Druckername nicht genau stimmt. Unter Geräte und Drucker und den Eigenschaften des bestimmten Druckers den Namen per Copy&Paste in den Code übertragen)
:D das hatte ich fast übersehen
kannst du mir das kurz erläutern? Weil in deinem Fall ja ein Druck VOR ausfüllen des Formulars angestoßen werden würde, oder?
Hallo,
nun ja, das wäre tatsächlich so. 8)
Wenn Du erst nach dem Ausfüllen drucken willst,
dann bau halt eine Schaltfläche in das (die) Formular(e) ein, das den Druck mit Docmd.Printout (!) anstößt.
Das Laden des Forms erübrigt sich an dieser Stelle. Die Schaltfläche kann übrigens so eingestellt werden, dass sie nicht im Ausdruck erscheint...
Zitat von: DF6GL am Januar 21, 2016, 18:09:04
Hallo,
nun ja, das wäre tatsächlich so. 8)
Wenn Du erst nach dem Ausfüllen drucken willst,
dann bau halt eine Schaltfläche in das (die) Formular(e) ein, das den Druck mit Docmd.Printout (!) anstößt.
Das Laden des Forms erübrigt sich an dieser Stelle. Die Schaltfläche kann übrigens so eingestellt werden, dass sie nicht im Ausdruck erscheint...
also er druckt jetzt auch zweimal, aber nutzt beide Male den Standartdrucker. da scheint der Wurm beim Wechseln des Druckers drin zu sein
Hallo,
vielleicht änderst Du ja den Drucker zu sich selber...
Hi!
Nee, selbst wenn ich den Drucker zweimal manuell festlege kommen die Druckaufträge nur auf einen...
Application.Printer = Application.Printers("hp LaserJet 3015 PCL 5")
DoCmd.PrintOut
Application.Printer = Application.Printers("An OneNote 2010 senden")
DoCmd.PrintOut
Hallo,
Zitat von: julle am Januar 21, 2016, 17:26:11
wie funktioniert das mit dem Unterbrechen?
setze einen Haltepunkt in die Prozedur und löse das Ereignis aus dem Formular heraus aus.
Stop
Application.Printer = Application.Printers("\\**.**.**\BD-P30339")
MsgBox Application.Printer.DeviceName
Stop
DoCmd.PrintOut
Stop
Application.Printer = Application.Printers("An OneNote 2010 senden")
MsgBox Application.Printer.DeviceName
Stop
DoCmd.PrintOut
--> Also habe nun "stop" als Unterbrechung eingefügt (funktioniert als Haltepunkt). Lasse mir zusätzlich durch "MsgBox Application.Printer.DeviceName" den aktuellen Drucker anzeigen nach Wechseln des Standartdruckers.
Die richtigen Drucker werden angezeigt, allerdings wird der Druck mit einem ganz anderen Drucker durchgeführt (in dem Fall ein PDFCreator)
habt ihr ne Idee? :o
EDIT: Bei Seite Einrichten war "spezieller Drucker" angehakt ..... ;D Nu gehts!!!
Hallo nochmal, ich hab nichts passendes bei der Recherche gefunden, deswegen schreib ichs mal hier rein.
ich habe im Formular ein Kombinationsfeld mit Ländern. Bei einem bestimmten Formular muss nun für verschiedene Länder eine entsprechende E-Mail Adresse hinterlegt werden an die das Formular dann geschickt werden soll.
Das Formular schicke ich per "DoCmd.SendObject acSendForm" los. Wie verknüpfe ich gewähltes Land mit entsprechender E-Mail Adresse? Es sind nur 8 Länderspezifische E-Mail-Adressen und nur in diesem einen Formular (von 24).
Es macht mMn weniger Sinn das global in die Ländertabelle zu pflegen, weil bei anderen Formularen die Länder keine Rolle spielen.
Erster Schritt wäre die E-Mail Adresse als Variable darzustellen. Dann muss eine Zuordnung stattfinden. Weiter reichen meine VBA-Skills nicht, könnt ihr mir da Hinweise geben?
Danke und Grüße
Julian
Hallo,
ich würde dir dringend dazu raten, die Email-Adressen in die Ländertabelle zu packen (oder in eine separate Tabelle), weil das so einfach leichter pflegbar ist.
Zitat von: MaggieMay am Januar 27, 2016, 18:21:02
Hallo,
ich würde dir dringend dazu raten, die Email-Adressen in die Ländertabelle zu packen (oder in eine separate Tabelle), weil das so einfach leichter pflegbar ist.
Das ist wahrscheinlich die bessere Idee, hab ich nun auch gemacht (in einer seperaten Tabelle), aber wie geht es nun weiter?
ZitatDas Formular schicke ich per "DoCmd.SendObject acSendForm" los.
Das wäre dann wohl die Stelle an der du dir zunächst einmal die Email-Adresse besorgen musst, bspw. per
DLookUp auf die neu eingerichtete Tabelle. Das Landkennzeichen sollte sich aus dem aktuellen Datensatz entnehmen lassen.
Zitat von: MaggieMay am Januar 28, 2016, 09:57:29
ZitatDas Formular schicke ich per "DoCmd.SendObject acSendForm" los.
Das wäre dann wohl die Stelle an der du dir zunächst einmal die Email-Adresse besorgen musst, bspw. per DLookUp auf die neu eingerichtete Tabelle. Das Landkennzeichen sollte sich aus dem aktuellen Datensatz entnehmen lassen.
Ich hab das nachgeschlagen und ich komme durcheinander mit der richtigen Zuordnung von Ausdruck, Domäne und Kriterium bzw. der Notation.
Dim varAdresse As Variant
varAdresse = DLookup("[Mailadresse]", "tblLänder", "[Land] = " & Forms!~314!cmbLand)
Im DoCmd.SendObject hab ich die E-Mail Adresse als "varAdresse" hinterlegt
In Tabelle "tblLänder" sind die Spalten "Land" und "Mailadresse" hinterlegt.
In Formular "~314" wird im Kombinationsfeld "cmbLand" das entsprechende Land ausgewählt.
Das Land ist vermutlich ein Text, also musst du den Wert in Hochkommata setzen:
varAdresse = DLookup("[Mailadresse]", "tblLänder", "[Land] = '" & Forms!~314!cmbLand & "'")
Evtl. macht auch das Sonderzeichen Probleme, die sich folgendermaßen umgehen lassen:
varAdresse = DLookup("[Mailadresse]", "tblLänder", "[Land] = '" & Forms("~314")!cmbLand & "'")
Da das Land vermutlich dem aktiven Formular entnommen wird, in dem auch der Code ausgeführt wird, sollte auch diese Schreibweise funktionieren:
varAdresse = DLookup("[Mailadresse]", "tblLänder", "[Land] = '" & Me!cmbLand & "'")
Zitat von: MaggieMay am Januar 28, 2016, 12:24:56
Da das Land vermutlich dem aktiven Formular entnommen wird, in dem auch der Code ausgeführt wird, sollte auch diese Schreibweise funktionieren:
varAdresse = DLookup("[Mailadresse]", "tblLänder", "[Land] = '" & Me!cmbLand & "'")
ein Traum, vielen Dank! :)