Hallo. Ich möchte gern von einem Formular aus einen Bericht öffnen - ein Angebot. Allerdings soll man für dieses Angebot ein paar Optionen angeben können. Ich stelle mir das so vor, dass ich im Hauptformular (frm_Haupt) eine Schaltfläche betätige, worauf sich ein kleines Popup Formular (frm_Optionen) öffnet mit zwei Checkboxen und wieder einer Schaltfläche. Wenn die Checkboxen aktiviert sind, sollen im Bericht (Angebot) bestimmte Felder aus oder eingeblendet werden. Beim klick auf die Schaltfläche des Popup öffnet sich dann der Bericht und kann mit den entsprechend vorher festgelegten Layout gedruckt werden.
Wie stelle ich das via VBA Code an?
LG
datekk
Hallo,
übergib dem Bericht eine "Kennung" (Zahl oder Text) entspr. der Checkbox-Kombination über den Openargs-Parameter der Openreport-Methode. Im Bericht in dessen "Öffnen"-Ereignis(Prozedur) stellt Du entspr. der Openargs-Eigenschaft die Textfelder ein.
:) Der Franz... Danke :)
Wie immer brauch ich mal ein konkretes Codebeispiel... Von Openargs hab ich eben zum ersten Mal gehört..
Ich dachte man kann das ggf. mit Variablen regeln welche man dann beim öffnen des Berichts abfragt. Also das Formular frm_Optionen beinhaltet z.B. die Felder ChkBox1 und ChkBox2. Deren Wert wird an eine Variable gegeben z.B. Chk1 und Chk2... beim öffnen des Berichts wird dann mittels If Routine der Zustand der Felder behandelt und entsprechend die Felder aktiviert.. also z.B.
If Chk1 = 1 Then
me.Feld1.visible = True
else
me.feld1.visible = false
End If
Ich bin bloß nicht sicher, wie ich die Variable vom Formular auf den Bericht übergebe oder bleibt diese erhalten? Oder nutzt man hier die TempVars?
Hallo,
naja....
'Im Formular:
.
Sub Drucken_Click()
Docmd.Openreport "rptBericht1",,,"AngebotID =" & Me!AngebotID , Openargs:= 2 * Me!chkbox1 + Me!chkbox2
End Sub
'und Im Bericht:
Sub Report_Open()
If not Isnull(Me.Openargs) Then
Select Me.Openargs
Case 0
'Tu das , wenn kein Haken zu sehen ist
Case -1
'Tu das, wenn nur Chkbox2 angehakt
Case -2
'Tu das, wenn nur Chkbox1 angehakt
Case -3
'Tu das, wenn beide angehakt
Case else
'tu hier am besten gar nichts mehr...
End Select
End if
End Sub
Mh... ok.. probier ich mal aus.. aber vorher noch eine Frage....
Ich öffne ja das Optionen Formular aus dem Hauptformular heraus via
Private Sub Befehl308_Click()
DoCmd.OpenForm "frm_Optionen", acNormal
End Sub
Das Optionen-Formular enthält aber gar nicht das Feld [AngebotID] welches als Filter dienen soll. Dieses Feld befindet sich im Hauptformular. Die Funktion me.AngebotID wird hier sicher eine Fehlermeldung bringen. Wie ist dies zu lösen?
UND:
Bei der Variante der OpenArgs sieht es so aus, als ob man für jeden Fall eine Lösung braucht - also für alle "Häkchenkonstellationen". Kann man nicht jedes Häkchen für sich bewerten? Es sollen nämlich mehr werden als 2 Checkboxen.. ggf. 4 oder 6...
Hallo,
Lösung 1: Die AngebotID wird auf die Gleiche Art und Weise an das Optionen-Formular übergeben
Lösung 2: Man bezieht sich nicht auf "Me" (das akt. Form, in dem der Code läuft, sondern mit explizter Schreibweise auf das Hauptform:
,"AngebotID =" & Forms!Hauptformular!AngebotID,
wobei ein extra Form für nur diese Optionen eher überkanditelt ist.
ZitatUND:
Bei der Variante der OpenArgs sieht es so aus, als ob man für jeden Fall eine Lösung braucht - also für alle "Häkchenkonstellationen". Kann man nicht jedes Häkchen für sich bewerten? Es sollen nämlich mehr werden als 2 Checkboxen.. ggf. 4 oder 6...
wieso wird eigentlich bei docmd.openform das Formular geöffnet und bei docmd.openreport der Bericht gedruck? Wie kann man denn eigentlich den Bericht nur anzeigen lassen?
Hallo,
"drucken" ist der standard-Fall. Um den Bericht in Voransicht zu öffnen , heißt das so:
Docmd.Openreport "rptBericht1",acPreview,,"AngebotID =" & Me!AngebotID , Openargs:= 2 * Me!chkbox1 + Me!chkbox2
Hallo,
Zitat von: datekk am Juli 30, 2014, 15:41:38
wieso wird eigentlich ...
wieso schaust du dir die Beschreibung der Funktionen nicht in der Access-Hilfe an, ehe du sie benutzt?!
Ich habe das Thema anderweitig gelöst und zwar dank Franz seinem Vorschlag, den Pfad auf die Steuerelemente der geöffneten Formulare zu nutzen. Das Funktioniert sehr gut. Somit kann ich im Bericht auf die Felder der geöffneten Formulare zugreifen und mit IF, Then, Else super arbeiten. Bei geschlossenen Formularen habe ich die Variablenfunktion Public gefunden und diese funktioniert auch super.
Danke :)