Hallo Zusammen,
ich möchte gerne bei einem neuen Formular das Thema Optionsgruppe auf ein Listenfeld ,,lstKontakte" anwenden. Leider finde ich zu meinem Anliegen nichts passendes im Forum, vielleicht suche ich auch falsch.
Grundsätzlich möchte über vier verschiedene Radiobutton ,,Option120, Option122, Option124 u. Option126" aus der Optionsgruppe ,,optKontakte" das Listenfeld ,,lstKontakte" filtern.
Das Listenfeld ,,lstKontakte" bezieht seine Werte aus der Abfrage ,,abfKontakte".
,,Option120" soll die Abfrage ungefiltert anzeigen und ist Standartwert.
Mit ,,Option122" sollen alle Werte der Spalte ,,statusID_P" aus der Abfrage mit dem Wert/Zahl ,,1 oder 2" gefiltert werden.
Mit ,,Option124" sollen alle Werte der Spalte ,,statusID_P" aus der Abfrage mit dem Wert/Zahl ,,2 oder 6 oder 7" gefiltert werden.
Wenn ,,Option126" angeklickt wird, würde ich gerne einzelne Listenwerte markieren können.
Dies Werte würde ich dann später per Button (Bericht öffnen) an ein Textfeld in einem Bericht übergeben wollen. Aber dazu vielleicht später mehr, wenn ich dort auch Probleme haben sollte.
Wüsste vielleicht jemand einen entsprechenden Forumsbeitrag in dem ich mich aufschlauen könnte?
Gruss
mad
			
			
			
				Hallo Zusammen,
hab mal verschiedene Informationen zusammengetragen und mit folgenden Code gebastelt. Habe mich auch erstmal auf die ersten drei Radiobutton beschränkt und auch nur auf eine Zahl.
Private Sub optKontakte_AfterUpdate()
    Select Case optKontakte
      Case 1
        lstKontakte!Filter = "*"
        lstKontakte!FilterOn = False
       Case 2
        lstKontakte!Filter = "[statusID_P] = 1"
        lstKontakte!FilterOn = True
      Case 3
        lstKontakte!Filter = "[statusID_P] = 7"
        lstKontakte!FilterOn = True
    End Select
End SubLeider bekomme ich mein Listenfeld so nicht gefiltert.Stattdessen bekomme ich folgende Fehlermeldung:
ZitatLaufzeitfehler 13 Typen unverträglich
Habe versucht das mit dem Vorschlag von Beaker s.a. zu beheben:
ZitatIf Not Me.NewRecord Then
       'Dein bisheriger Code
    End If
klapp aber leider nicht.
Komme derzeit leider nicht weiter.
Gruss
mad
			
 
			
			
				Hall,
nun bin ich schon einen kleinen Schritt weiter.
Habe in der Abfrage "abfKontakte" den Zusammenhang zur Optionsgruppe "optKontakte" hergestellt. Bin mir aber nicht ganz sicher.
Zitat[Formulare]![abfKontakte]![optKontakte]
Abfragecode:
SELECT Personal.PID, Personal.NameP, Personal.Adresse, Personal.HausNr, Personal.PLZ, Ortsteile.Ort, Personal.statusID_P
FROM Ortsteile INNER JOIN Personal ON Ortsteile.OrtID = Personal.OrtID_F
WHERE (((Personal.statusID_P)=[Formulare]![abfKontakte]![optKontakte]))
ORDER BY Personal.NameP;
Nun reagieren zwar die Radiobutton, aber nicht wie gewünscht:
Wenn ich nämlichen einen anklicke dann öffnet ein Parameterfenster, siehe Bild, und verlangt nach einer Eingabe.
 Der Code zur Optionsgruppe ist immer noch der selbe.
Gruss
mad
			
 
			
			
				Hallo,
ZitatPrivate Sub ramKontakte_AfterUpdate()  ' ramKontakte ist ein Options-Rahmen, der die Optionsfelder (Optionxxx) enthält
    Select Case optKontakte
      Case 1   ' Wert des Optionfeldes "Option120"
        lstKontakte.Rowsource = "Select Feld1, Feld2 from abfKontakte"
        
       Case 2
        lstKontakte.Rowsource = "Select Feld1, Feld2 from abfKontakte where [statusID_P] in (1,2)"   'falls "statusID_P" den Datentyp,Zahl, Long besitzt
      Case 3
        lstKontakte.Rowsource = "Select Feld1, Feld2 from abfKontakte where [statusID_P] in (2,6,7)"  'falls "statusID_P" dito
    
    End Select
End Sub
ZitatWenn ,,Option126" angeklickt wird, würde ich gerne einzelne Listenwerte markieren können.
Die Einträge in Listenfeld können immer markiert werden, sofern es nicht gesperrt ist. Wenn mehrere Einträge gleichzeitig markiert, bzw. ausgewählt werden sollen, muss die Eigenschaft "Mehrfachauswahl auf" "einzeln" oder "erweitert "stehen.
			
 
			
			
				Hallo,
Danke wieder mal für die Unterstützung.
Mußte den Code noch etwas anpassen, die " vor Feld1 (bei mir PID) entfernt. Und dann habe ich den Code noch wie folgt um das automatische markieren/auswählen erweitert. Nur nicht bei "Case 1". Welche Daten angezeigt werden habe ich auch angepaßt.
Der aktuelle Code sind nun wie folgt aus:
Private Sub optKontakte_AfterUpdate()
        Dim i
     
    Select Case optKontakte
      Case 1   ' Wert des Optionfeldes "Option120"
        lstKontakte.RowSource = "Select PID, NameP, Adresse, HausNr, PLZ, Ort, statusID_P from abfKontakte where [statusID_P] in (1,2,6,7)"
       Case 2   ' Wert des Optionfeldes "Option122"
        lstKontakte.RowSource = "Select PID, NameP, Adresse, HausNr, PLZ, Ort, statusID_P from abfKontakte where [statusID_P] in (1,2)"   'falls "statusID_P" dito
     For i = 0 To Me!lstKontakte.ListCount - 1
         Me!lstKontakte.Selected(i) = (Me!lstKontakte.Column(0, i))
     Next i
      Case 3    ' Wert des Optionfeldes "Option124"
        lstKontakte.RowSource = "Select PID, NameP, Adresse, HausNr, PLZ, Ort, statusID_P from abfKontakte where [statusID_P] in (2,6,7)"
         For i = 0 To Me!lstKontakte.ListCount - 1
         Me!lstKontakte.Selected(i) = (Me!lstKontakte.Column(0, i))
     Next i
    End Select
End Sub
Funktioniert wie gewünscht.
Wie bereits am Beitragsanfang geschrieben, möchte ich jetzt die markierten DS aus lstKontakte an einen Bericht übergeben. Der Bericht soll ähnlich wie ein Serienbrief in Word funktionieren, pro übertragen DS ein Bericht die ich dann ausdrucken kann.
Mein aktuelle Code lautet:
Private Sub btnSerienbrief_Click()
Dim i As Long, Auswahl As String
 If Me!lstKontakte.ItemsSelected.Count <> 0 Then
     For i = 0 To Me!lstKontakte.ItemsSelected.Count - 1
         Auswahl = Me!lstKontakte.ItemsSelected(i) & "," & Auswahl
     Next
     Auswahl = "[statusID_P] in (" & Mid(Auswahl, 1, Len(Auswahl) - 1) & ")"
     DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewPreview, , Auswahl
 Else
     MsgBox "Bericht wird nicht geöffnet, da keine Datensätze ausgewählt."
 End If
 
End Sub
öffnet zwar den Bericht, aber nicht wie gewünscht.
Frage noch,
sollte ich dazu bei Bedarf einen neuen Beitrag eröffnen?
Danke
mad
			
			
			
				Hallo,
Openreport muss innerhalb der For-Schleife stehen, damit pro Listenfeldeintrag ein separater Bericht gedruckt wird.
Neuer Thread erübrigt sich hier und  jetzt.
			
			
			
				Hallo,
habe es wie folgt versucht:
Private Sub btnSerienbrief_Click()
Dim i As Long, Auswahl As String
 If Me!lstKontakte.ItemsSelected.Count <> 0 Then
     For i = 0 To Me!lstKontakte.ItemsSelected.Count - 1
        Auswahl = Me!lstKontakte.ItemsSelected(i) & "," & Auswahl
        DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewPreview
     Next
     Auswahl = "[statusID_P] in (" & Mid(Auswahl, 1, Len(Auswahl) - 1) & ")"
 Else
     MsgBox "Bericht wird nicht geöffnet, da keine Datensätze ausgewählt."
 End If
End SubFunktioniert noch nicht.
Wird das richtige Feld übertragen?
ZitatAuswahl = "[statusID_P] in .....
"PID" funktioniert aber auch nicht.
Habe derzeit beide Textfelder im Bericht, will aber nicht funktionieren.
Gruss
mad
			
 
			
			
				Hallo,
was willst Du mit "In" bei Ausdruck eines einzelnen DS pro DS?
Private Sub btnSerienbrief_Click()
Dim lngPID As Long, itm As Variant
 If Me!lstKontakte.ItemsSelected.Count > 0 Then
     For Each itm In Me!lstKontakte.ItemsSelected
        lngPID = Me!lstKontakte.Column(0, itm)  ' wenn die ID in der ersten Spalte (0) steht
       DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewPreview, , "[statusID_P] = " & lngPID
     Next
     
 Else
     MsgBox "Bericht wird nicht geöffnet, da keine Datensätze ausgewählt."
 End If
End Sub
			
			
			
				Wenn ich mehrere Zeilen im Listenfeld auswähle, bekomme ich immer nur einen Bericht mit der ersten Auswahl angezeigt.
Als Info mal mein Grundgerüst meines Berichts, siehe Bild im Anhang und die Abfrage.
Gruss
mad
			
			
			
				Hallo,
entferne "acViewPreview" und lass die Berichte mal drucken.....
Vermutlich muss die Seitenansicht manuell geschlossen werden.
Debuggen könnte auch Klarheit bringen....
Haltepunkt an das For-Statement setzen, mit F8 durchtakten und die Variablenwerte prüfen...
			
			
			
				Hallo,
das Debuppen habe ich mir mittlerweilen schon angewöhnt. Aber eine Meldung kommt dabei leider auch nicht.
Habe "acViewPreview" mal weggelassen. Dann werden 13 Berichte ausgedruckt, obwohl ich nur zwei DS markiert hatte. Wenn alle markiert gewesen wäre müssten es 109 DS sein. Das komische ist, er druckt die 13 Berichte mehrfach aus. Habe den Druck dann abgebrochen.
Einen Haltepunkt habe ich auch gesetzt, kann aber die Variablenwerte nicht wirklich deuten:
IngPID=0
itm=leer
(mit acViewPreview=2)
IngPID=0
Gruss
mad
			
			
			
				Hallo,
kannst Du die Db mal hochladen?  datenreduziert,komprimiert/repariert und gezippt.
Wenn der Code mit F8 einzeln durchgetaktet wird, ändern sich bei jedem Durchlauf die Variablenwerte.....
Probiere Folgendes:
Im Direktfenster:
DoCmd.OpenReport "Bericht_Vorlage_hoch", , ,"[statusID_P] = 1"
falls es 1 als ID gibt
Wenn ich das Bild des Berichtsentwurf ansehe, sollten die Felder im Seitenkopf in den Detailbereich verschoben werden.....
			
			
			
				Hallo,
hier mal die abgespeckt Muster-DB.
Deine Anregungen sehe ich mir im Anschluß noch an.
Gruss
mad
			
			
			
				Hallo!
DoCmd.OpenReport ... acViewPreview ...
Wenn du den Bericht beim 2. Aufruf nicht schließt, bleibt der zuerst geöffnete angezeigt, wenn du acViewPreview verwendest.
Das ist nicht wie bei Formularen, dass der Datensatz gewechselt wird.
Zum Ausprobieren:
Den Bericht mit AcDialog öffnen. Dann bleibt die for-next-schleife stehen, solange ein Bericht geöffnet ist.
DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewReport, , "[PID] = " & lngPID, acDialog
mfg
Josef
			
			
			
				Hallo,
mach halt das, was Dir empfohlen wird:
ZitatWenn ich das Bild des Berichtsentwurf ansehe, sollten die Felder im Seitenkopf in den Detailbereich verschoben werden.....
und
Zitatentferne "acViewPreview" und lass die Berichte mal drucken.....
Vermutlich muss die Seitenansicht manuell geschlossen werden.
			 
			
			
				Hallo,
Zitatmach halt das, was Dir empfohlen wird:
mache ich:
ZitatWenn ich das Bild des Berichtsentwurf ansehe, sollten die Felder im Seitenkopf in den Detailbereich verschoben werden.....
Dabei werden alle Adressen auf einen Bericht gedruckt, und das ganze so oft soviele DS ich ausgewählt hatte. Ist nicht das was ich möchte! Ich denke diese Felder sollten im Seitenkopf bleiben.
Zitatentferne "acViewPreview" und lass die Berichte mal drucken.....
Vermutlich muss die Seitenansicht manuell geschlossen werden.
Auch hier wird irgendwas gedruckt.
Die Anregung von Josef P.,
DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewReport, , "[PID] = " & lngPID, acDialoghat zumindestens die beiden Berichte wie DS ausgewählt angezeigt. Konnte diese aber nicht drucken.
Und jeden Bericht einzeln zu schliessen ist auch nicht sehr praktikabel.
Gruss
mad
			
 
			
			
				Hallo,
Dabei werden alle Adressen auf einen Bericht gedruckt, und das ganze so oft soviele DS ich ausgewählt hatte. Ist nicht das was ich möchte! Ich denke diese Felder sollten im Seitenkopf bleiben.Nein!!
Der Bericht druckt nur dann mehrere Datensätze, wenn die Filterung nicht stimmt.
ZitatAuch hier wird irgendwas gedruckt.
Ja, und was genau?
Sobald ich die Felder vom Seitenkopf in den Detailbereich verschoben hatte, wurde pro Listenfeldauswahl je ein Bericht mit den entspr. Daten gedruckt....
PS:
Lad Deine akt. Datei nochmal hier hoch...Anbei die DB mit modifizierem Bericht...
			
 
			
			
				Hallo,
habe nochmals beide Varianten hochgeladen.
1x Variante mit den Vorschlägen von DF6GL, ohne:
ZitatDoCmd.OpenReport "Bericht_Vorlage_hoch", , ,"[statusID_P] = 1"
1x die Variante mit den Vorschlägen von JosefP
Gruss
mad
			
 
			
			
				Hallo,
bei "deiner meiner" Version fehlt ein Komma:
 DoCmd.OpenReport "Bericht_Vorlage_hoch", , ,  "[PID] = " & lngPID
und bei Josef's Lösung muss die Berichtsansicht (acViewReport) manuell geschlossen werden, was alles schon angemerkt wurde...
			
			
			
				Hallo,
mit dem "Komma" funktionierts.
Gibt es keine Möglichkeit das der/die Berichte vor dem drucken geöffnet/angezeigt werden, und ich erst dann den druck starte?
Gruss
mad
			
			
			
				Du kannst alle benötigen Datensätze in einem Bericht ausgeben und dann drucken.
Dazu musst du allerdings die Steuerelemente vom Seitenkopf in den Detailbereich bzw. in einen Gruppenkopf von PID verschieben (wie bereits von Franz zuvor erwähnt).
Die "Seite n von m"-Anzeige muss auch angepasst werden, wenn die Ausgabe je PID jeweils mit Seite 1 beginnen soll.
Code zum Anzeigen aller DS in einem Bericht:
Private Sub btnSerienbrief_Click()
 Dim lngPID As Long
 Dim SqlFilter As String
 If Me!lstKontakte.ItemsSelected.Count > 0 Then
     SqlFilter = GetSelectedListboxItemFilterString(Me.lstKontakte, "[PID]")
     DoCmd.OpenReport "Bericht_Vorlage_hoch", acViewPreview, , SqlFilter
 Else
     MsgBox "Bericht wird nicht geöffnet, da keine Datensätze ausgewählt."
 End If
 
 
End Sub
Private Function GetSelectedListboxItemFilterString(ByVal lb As ListBox, ByVal DataFieldName As String) As String
   Dim itm As Variant
   Dim FilterValueString As String
   Dim FilterString As String
   For Each itm In lb.ItemsSelected
      FilterValueString = FilterValueString & "," & lb.Column(0, itm)
   Next
   
   If Len(FilterValueString) > 0 Then
      FilterValueString = Mid(FilterValueString, 2) ' 1. "," wegschneiden
      FilterString = DataFieldName & " in (" & FilterValueString & ")"
   End If
   
   GetSelectedListboxItemFilterString = FilterString
End Function
mfg
Josef
			
			
			
				Hallo,
und nicht vergessen:
			
			
			
				Hallo DF6GL u. Josef P.,
muß mich sehr herzlich bei Euch für die tolle und verständnisvolle Unterstützung bedanken.
Vielen Dank
mad
PS.: jetzt muß ich mich noch dransetzen um den Rest in den Bericht zu bringen