Hallo
Ich stehe vor folgendem Problem: Ich habe ein Formular in welchem ich verschiedene Kriterien für eine Abfrage/Bericht erfasse, wie Datum, Sortierung, Artikel, KontoNr usw. Nun möchte ich, dass gewisse Felder nach dem ich den Bericht mit einem Button gestartet habe gelöscht werden, jedoch nicht alle.
Wie sieht der VB Code dafür aus?
Gruss Daniel
Hallo,
Du meinst die Frage schon ernst..?
Sub btnAktion_click()
Docmd.Openreport .............
Me!Sortierung=Null
Me!KontoNr=Null
End Sub
Hallo,
;) ;D
ZitatDu meinst die Frage schon ernst
Warum die Frage nach der Ernsthaftigkeit deiner Frage?
Wenn das gebundene Formularfelder sind, dann sind die Herkunftsfelder der
zugrunde liegenden Tabelle (Datenherkunft) nach dieser Aktion auch leer!
Überlege noch mal ganz genau!
Hallo
Also die Daten die ich zücksetzen will sind Daten von ungebunden Feldern und Kombifeldern auf dem Formular die ich nach einer gestarteten Abfrage zurücksetzen will. Die Frage war ernsthaft, da ich in der Hilfe von Access nichts gefunden habe, wie ich diese zurücksetzen kann und den Befehl nicht kannte. Anhand der Antwort ist es mir natürlich sonnenklar. Mir ist auch klar, dass ich mit diesem Befehl gebundene Felder in der Tabelle lösche.
Wenn aber schon zwei Gurus geantwortet haben, komme ich mit einer anderen Frage bei der ich anstehe:
Ich möchte in einem Bericht ungebunden Felder mit Felder von der Abfrage die die Grundlage für diesen Bericht ist abfüllen, dass heisst ich bearbeite diese zuerst in einer Funktion und das Resultat will ich in die ungebunden Felder schreiben, meine Frage ist nun, wie mache ich dies?
Gruss Daniel
Hallo,
ZitatIch möchte in einem Bericht ungebunden Felder mit Felder von der Abfrage die die Grundlage für diesen Bericht ist abfüllen
wobei sich dann für mich die Frage stellt, warum das UNGEBUNDENE Felder in einem Bericht sein müssen, wenn die Datenherkunft des Berichts diese Felder samt Inhalt liefert?
Zitatdass heisst ich bearbeite diese zuerst in einer Funktion und das Resultat will ich in die ungebunden Felder schreiben
Du kannst ja den Aufruf deiner Funktion auch in die Abfrage einbinden und so die Berechnungen in die Datenherkunft bringen.
Hallo,
ich frage mich sowieso sehr oft, warum man sich das antut und mit ungebundenen Formularen und Berichten arbeitet.
Access bietet serienmäßig so viele Standardfunktionen, dass man sich die Programmierarbeit dazu sparen kann. Das leeren der Felder würde schon mal vollständig entfallen. Besser wäre es die Programmierenergie auf die Gestaltung der Formulare und eine Plausibilitätsprüfung zu verwenden. Letzteres ist auch bei ungebundenen Objekten erforderlich.
Nur so nebenbei.
Mir geht es eigentlich um folgendes in meinem Bericht:
Ich habe in einer Tabelle die Firmenadresse abgespeichert insgesamt 5 Zeilen. Diese soll nun auf einem Rechnungsformular angezeigt werden. So weit so gut, wenn nun eine Zeile fehlt soll das ganze nach oben geschoben werden. Nun kann die Firmenadresse nur aus 2 oder 3 Zeilen bestehen usw.
Ich habe früher mit einem Reportgenerator gearbeitet, da konnte ich diese 5 Zeilen in einen Behälter setzten und jede Zeile schrumpfen lassen, wenn kein Wert vorhanden ist. Auch konnte ich mehrer Bausteine eröffnen diese an einen Hauptbaustein anhängen wie ein Gruppe und mit einer Logik versehen, wenn dieser angezeigt werden soll. All dies fehlt mir ein wenig im Access um wirklich gute Formulare zu erstellen.
Ich versuchte nun also mit Funktionsgenerator die Logik zu erstellen wenn die Adresse fehlt und der NamenZusatz fehlt, dann schreibst die du schon den Ort in die zweite Zeile usw. Aber das wurde sehr unübersichtlich, die ersten drei Zeilen funktionierten bei der 4 habe ich es nicht hingekriegt, so dass ich dachte mit einem VB schript kannst du das ganze einfacher und übersichtlicher erstellen. Doch ich habe es nicht geschafft einen Wert in ein ungebundenes Feld zu schreiben, es funktioniert nur wenn das Feld an einer anderen Stelle schon im Report eingefügt habe. Doch das kann es auch nicht sein.
Grundsätzlich interessiert mich natürlich, wie ich in in einem Report auf ein ungebundenes Feld schreiben kann, denn ich möchte ja dazulernen, doch vielleicht könnt ihr mir ja eine bessere Lösung vorschlagen.
Gruss Daniel
Hallo,
ZitatIch habe früher mit einem Reportgenerator gearbeitet, da konnte ich diese 5 Zeilen in einen Behälter setzten und jede Zeile schrumpfen lassen, wenn kein Wert vorhanden ist.
Auch das würde mit einem gebunden Bericht mit einer Art Behälter gehen.
Man kann eine Adressfeld zusammensetzten und nur Felder verwenden die auch einen Inhalt haben. Es ergibt sich dann für die Adresse ein genau passendes Feld. Mit + statt dem & zur Textverkettung geht da schon ein Teil automatisch wenn ein Feld (z.B. Titel) nicht gefüllt ist.
ZitatAuch konnte ich mehrer Bausteine eröffnen diese an einen Hauptbaustein anhängen wie ein Gruppe und mit einer Logik versehen, wenn dieser angezeigt werden soll. All dies fehlt mir ein wenig im Access um wirklich gute Formulare zu erstellen.
Solche Dinge lassen sich zum großen Teil bereits über das Datenmodell steuern. Leere Felder sollte es im Regelfal möglichst wenig bis idealerweise keine geben.
Für detailiertere Vorschläge müsste man das Datenmodell kenne. Für ungebundene Objekte besteht jedenfalls kein Grund.
Hallo MzKlMu
Du schreibst von einem Art Behälter und dass man die Felder mit einem + zusammenfügen soll. Kannst du mir erklären wie das genau geht, vielleicht mit einem Beispiel.
Auch wenn du sehr davon abräts mit ungebunden Feldern zu arbeiten, bitte ich doch mir zu erklären, wie ich so etwas mache, vielleicht auch mit einem Beispiel.
Vielen Dank
Daniel
Hallo,
so genau habe ich nicht verstanden, was Du machen willst...
Hast Du nun mehrzeiligen Text schon in einem Feld (also Text mit Zeilenschaltungen) und willst bei Abwesenheit z. B. der Straße eine Leerzeile dafür einsetzen oder hast Du mehrere separate Felder für die einzelnen Adress-Teile, die Du zu einem Adressblock zusammensetzen willst und für leere Felder eine Leerzeile spendieren möchtest?
Hallo,
Zitatbitte ich doch mir zu erklären, wie ich so etwas mache, vielleicht auch mit einem Beispiel.
ich habe mit ungebundenen Objekten keinerlei Erfahrung, das habe ich bis jetzt weder verwendet noch gebraucht. Ich kann Dir daher dazu nicht helfen. Demzufolge habe ich auch kein Beispiel.
Das mit dem Feld muss ich mal schauen.
Hallo
Ich habe mehrere separate Felder Firmenname, FirmenZusatz, Adresse, PLZ, Ort und Land sowie Tel und EMail, Nun möchte ich einen Adressblock im Formular machen, welcher fehlende Zeile wie z.B. Adresse oder Firmenzusatz nicht anzeigt und die nachfolgenden Felder wie Ort nach oben schiebt.
Gruss Daniel
Also du kannst sowohl mit gebundenen als auch mit ungebundenen Feldern folgende Eigenschaften abrufen/setzen:
Me!Feldname.Top = wert ' Position der Oberkante des Feldes anpassen
Me!Feldname.Height = wert ' Höhe des Feldes anpassen
Me!Feldname.Visible = False ' ausblenden
Me!Feldname.Value = "" ' Inhalt des Feldes setzen
Me.Detailbereich.Height = wert ' Höhe des Detailbereichs anpassen
Me.Detailbereich.CanGrow = true ' Detailbereich kann sich vergrößern
Me.Detailbereich.CanShrink = true ' Detailbereich kann sich verkleinern
Man kann auch Felder "markieren" mit der Eigenschaft ".Tag" und dann eine Abfrage auf alle Controls machen.
Hier ein paar Beispiele, wie man elegant mit Controls und Tags umgehen kann:
FOR EACH ctl in Me.Controls
' Alle Controls bei denen in der Eigenschaft ".Tag" (zu Deutsch "Marke") ein "x" eingetragen ist Feldinhalt leeren
IF ctl.Tag="x" THEN
ctl.Value=""
END IF
' z.B.: alle Controls die keinen Inhalt haben ausblenden
IF NZ(ctl.Value)="" THEN
ctl.Visible=false
END IF
' Alle Controls bei denen in der Eigenschaft ".Tag" (zu Deutsch "Marke") ein "L" eingetragen ist Feldinhalt leeren
IF ctl.Tag="L" THEN
ctl.locked=true
END IF
' Alle Controls bei denen in der Eigenschaft ".Tag" (zu Deutsch "Marke") ein "_" eingetragen auf Höhe 0 setzen
IF ctl.Tag="_" THEN
ctl.height=0
END IF
' Alle Controls bei denen in der Eigenschaft ".Tag" (zu Deutsch "Marke") eine Zahl ist: Die linke Position des Feldes auf diese Zahl setzen
IF CLNG("0" & ctl.Tag)>0 THEN
ctl.left=CLNG(ctl.Tag)
END IF
NEXT
Hallo,
naja, man kann ja Vieles um 20 Ecken erledigen...
(Luftcode)
Dim strAdresse as String
strAdresse= Me!Firmenname & vbCrLf
strAdresse= strAdresse & IIf(Isnull(Me!FirmenZusatz),"",Me!FirmenZusatz & vbCrLf)
strAdresse= strAdresse & IIf(Isnull(Me!Adresse),"",Me!Adresse & vbCrLf)
strAdresse= strAdresse & IIf(Isnull(Me!Land + Me!Plz + Me!Ort),"","" & Me!Land & Me!Plz & Me!Ort & vbCrLf)
strAdresse= strAdresse & IIf(Isnull(Me!Tel),Me!EMail,Me!Tel & vbCrLf & Me!EMail)
Me!Adressfeld=strAdresse
Zitatwelcher fehlende Zeile wie z.B. Adresse oder Firmenzusatz nicht anzeigt und die nachfolgenden Felder wie Ort nach oben schiebt.
Schau dir einfach mal den Anhang an.
[Anhang gelöscht durch Administrator]
Hallo
Ich habe nun die Lösung von Franz umgesetzt. Ich habe nur ein Feld und das kann ich genau dort plazieren wo der Platz für das Sichtfenster ist im Umschlag. Die Lösung wo ich die die Felder auf Höhe = setze und bein Inhalt vergrössere kannte ich schon, mir gefällt bei dieser Lösung aber nicht, dass ich im Berichtsentwurf die Felder nicht mehr sehe.
Vielen Dank an alle die mir einen konstruktiven Tipp gegeben haben. Ich habe wieder einiges gelernt.
Gruss Daniel