Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Neueste Beiträge

#91
Bericht / Re: Laufzeitfehler 2501 'Die A...
Letzter Beitrag von Knobbi38 - Juni 22, 2026, 14:02:43
ZitatDoCmd.OpenReport "DeinBericht", acViewDesign, , , acHidden
Set Reports("DeinBericht").Printer = Application.Printers(strDrucker)
DoCmd.Close acReport, "DeinBericht", acSaveYes
DoCmd.OpenReport "DeinBericht", acViewNormal    DoCmd.OpenReport "DeinBericht", acViewDesign, , , acHidden
In einer Klick-Prozedur zum Drucken eher weniger geeignet. Damit würde man jedesmal den Default Printer eines Reports unnötiger weise neu zuweisen und dann den Report abspeichern.
Entweder man macht das temporär, oder über das Ribbon ordnet man dem Report den Drucker einmalig zu.

Knobbi38
#92
Bericht / Re: Laufzeitfehler 2501 'Die A...
Letzter Beitrag von Debus - Juni 22, 2026, 13:12:39
Hallo Jörg,

oder Du machst folgende Wege (natürlich nur einen davon)


Den Drucker direkt hart im Code beim Button hinterlegen dadurch kommt der Fehler auch nicht mehr. Dafür musst Du natürlich wissen wie Dein Drucker heißt und den darfst Du natürlich auch nicht umbenennen.

Private Sub btnDrucken_Click()
On Error GoTo ErrHandler

    Dim rpt As Report
    Dim strAlterDrucker As String
   
   
    DoCmd.OpenReport "DeinBerichtsname", acViewDesign, , , acHidden
    Set rpt = Reports("DeinBerichtsname")
   
   
    strAlterDrucker = rpt.Printer.DeviceName
   
   
    Set rpt.Printer = Application.Printers("HP LaserJet M404") ' <- Hier deinen Drucker eintragen
   
   
    DoCmd.Close acReport, "DeinBerichtsname", acSaveYes
    DoCmd.OpenReport "DeinBerichtsname", acViewNormal ' Druckt sofort
   
   
    DoCmd.OpenReport "DeinBerichtsname", acViewDesign, , , acHidden
    Reports("DeinBerichtsname").Printer = Application.Printers(strAlterDrucker)
    DoCmd.Close acReport, "DeinBerichtsname", acSaveYes
   
ExitHandler:
    Set rpt = Nothing
    Exit Sub
   
ErrHandler:
    If Err.Number = 2501 Then
        Resume Next
    Else
        MsgBox "Fehler " & Err.Number & ": " & Err.Description
    End If
    Resume ExitHandler
End Sub


Wenn Du wissen willst wie Deine Drucker im Windows heißen, dan schau mal so nach:

Dim p As Printer
For Each p In Application.Printers
    Debug.Print p.DeviceName
Next p


Die zweite Lösung ist die, den Drucker über einen Auswahlbox auszusuchen/ein zu geben:


Private Sub btnDruckenMitListe_Click()
On Error GoTo ErrHandler
   
    Dim rpt As Report
    Dim p As Printer
    Dim strDrucker As String
   

    For Each p In Application.Printers
        strDrucker = strDrucker & p.DeviceName & ";"
    Next p
   

    strDrucker = InputBox("Welchen Drucker möchtest Du verwenden?" & vbCrLf & _
                          Replace(strDrucker, ";", vbCrLf), "Drucker wählen")
   
    If strDrucker = "" Then Exit Sub ' Abgebrochen
   
    DoCmd.OpenReport "DeinBericht", acViewDesign, , , acHidden
    Set Reports("DeinBericht").Printer = Application.Printers(strDrucker)
    DoCmd.Close acReport, "DeinBericht", acSaveYes
    DoCmd.OpenReport "DeinBericht", acViewNormal
   
ExitHandler:
    Exit Sub
ErrHandler:
    If Err.Number <> 2501 Then MsgBox Err.Description
    Resume ExitHandler
End Sub

Hier wird kein OCX verwendet. Du kannst natürlich auch das  ganze mit einem OCX und Windows Boardmittel machen. Wenn Du willst kann ich auch das noch posten.

Holger

#93
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Nicolo#22 - Juni 21, 2026, 19:29:49
Hmm, das ist ja stark. Richtig verstehen ? Natürlich nicht. Weil das eine hohe Qualifikation verlangt. Glaube ich.
Ich werde es nur so nach und nach versuchen auszuprobieren.
Immer vorher mit Kopie der DB.
Mal schauen wie sich das alles einbauen lässt und wie es dann was genau macht.
-
Erstmal Danke. Melde mich wenn ich aus dem Urlaub bin wieder.
#94
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Bitsqueezer - Juni 21, 2026, 18:28:08
Hallo,

dafür hat die Klasse entsprechende Funktionen, um Filter auf andere Weise hinzuzufügen, die nicht aus der UI kommen.

Dazu gibt es das Interface-Modul "ICCFilterCallbacks", daß Du in Dein Formular zu Beginn des Codes nach den Options mit
Implements ICCFilterCallbacksintegrieren mußt. Das erstellt eine Schnittstelle für "Außenstehende" (hier dem clsCCFilter-Modul), nur auf bestimmte, genormte Subs zuzugreifen. Die Norm definiert das ICCFilterCallbacks-Modul.


Nachdem Du die Zeile eingefügt hast, wählst Du im VBA-Editor oben links im Dropdown "ICCFilterCallbacks", das fügt Dir die erste Funktion bereits ein. Die zweite mußt Du manuell über den rechten Dropdown einfügen. Von einem Interface müssen immer alle Funktionen implementiert werden, die 2. muß aber einfach keinen Inhalt haben.

Du verwendest hier "FilterBeforeApply", und damit das auch von der CCFilter-Klasse verwendet wird, mußt Du im Init-Code in Form_Load Deines Formulares noch "FilterUseCallbackBeforeFilter" auf "True" setzen (entsprechend für After, wenn Du das auch nutzen willst).

Der Code also:
Option Compare Database
Option Explicit
Implements ICCFilterCallbacks

Private ObjFilter As clsCCFilter

Private Sub Form_Load()
    Set ObjFilter = New clsCCFilter
    ObjFilter.FilterUseCallbackBeforeFilter = True
    ObjFilter.InitControls Me
End Sub

Private Sub ICCFilterCallbacks_FilterAfterApply(ByVal strFilter As String)

End Sub

Private Sub ICCFilterCallbacks_FilterBeforeApply(strFilter As String)
    Debug.Print strFilter
End Sub

Das würde hier den vom Filtermodul erstellten Filter im Direktfenster von VBA vor dem Filtern ausgeben.

Genau wie bei dem bekannten "Cancel"-Parameter kannst Du aber hier, weil es "BeforeFilter" heißt, den Filterstring jetzt beliebig manipulieren. Du kannst also Filter aus eigenen Komboboxen oder als festen Filterbestandteil intern einfach an den Filterstring anhängen.

Z.B.
    strFilter = strFilter & IIf(strFilter <> "", " AND ", "") & " (Ausgabe_Zubehoer > 1)"
So wird der Filter entsprechend erweitert. Soll der Filter sofort aktiv sein, mußt Du FilterApply manuell in Form Load setzen, ansonsten wird er erst nach der ersten Filtereingabe gesetzt und bleibt dann entsprechend dem, was Du in VBA formuliert hast.

Gruß

Christian


#95
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Nicolo#22 - Juni 21, 2026, 17:45:51
Okay. Ich weiß das man Beiträge auch Threads nennt.
In manchen Foren wird es nicht gern gesehen wenn man in einem Thema plötzlich noch andere Fragen stellt die vom Thema abweichen. Das dazu. Auch das man User direkt um Antwort bittet wird nicht gern gesehen, weil das andere User ausschliessen würde. So hat man mir das mal vorgeworfen.
Nun gut. Meine Frage betrifft FILTERN.
Hier speziell filtern mit einem Button per VBA.
Ich habe einige solcher Filter im Gebrauch.
Nachteil, es wird immer nur das gefiltert was im VBA steht.
Da ich auch in meinen Formularen Kombiboxen habe (CC-Filtermechanismen von dir), was super klappt, aber bei der Nutzung werden andere bestehende Filter aufgelöst.
Beispiel:
Ich kann mit der CC Filter Funktion (Cbo-Box) nach Fahrzeug filtern, aber nicht danach einen VBA Filter per Button der mir zum Beispiel nur Werte des Feldes "Ausgabe_Zubehoer" grösser 1 ausgibt.
Es geht immer nur eines von beiden.
Ich hoffe Christian du kannst nachvollziehen was ich meine.
-
Setze ich aber einen CC Filter mit der Kombibox "Filter_Modell" zum Beispiel nach Fahrzeug und gebe dann im CC-Filter Suchfeld "Filter_Bemerkung"
den Begriff Zub ein, dann wird alles angezeigt wo "Zub" im Text enthalten ist und auch das gewählte Fahrzeug bleibt.
Ich weiß, es ist etwas eigensinnig oder unfachmännisch formuliert.
-
Im Grunde heisst das, Filter zusammenbauen ist schwierig.
#96
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Bitsqueezer - Juni 20, 2026, 21:15:12
Hallo,

nein, wieso sollte das in einem öffentlichen Forum erlaubt sein, eine Frage zu stellen, und dann noch an einen User direkt? Wie kommt man auf so eine Idee???...  ;D  ;)

Übrigens, auch wenn es ähnlich aussieht, das nennt man "Thread" in Foren, nicht Chat. Ein Chat ist immer live.

Gruß

Christian
#97
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Debus - Juni 20, 2026, 19:59:49
Hey,

mache doch einfach einen neuen Chat auf, oder stelle hier die Frage das ist beides kein Problem

Holger
#98
Access Programmierung / Re: mit VBA den Focus auf ein ...
Letzter Beitrag von Nicolo#22 - Juni 20, 2026, 19:12:59
@Bitsqueezer
Danke Christian.
btw. Ist es erlaubt hier eine weitere Frage an dich zu stellen, aber die Problematik FILTERUNGEN betrifft.
Oder einen neuen Chat eröffnen dafür?
Ist es erlaubt User direkt anzusprechen?
VG
#99
Bericht / Re: Laufzeitfehler 2501 'Die A...
Letzter Beitrag von Bitsqueezer - Juni 20, 2026, 14:01:41
Hallo,

die Meldung kommt auch, wenn Du in Report_Open Cancel=True setzt.

Daher am besten immer einen Error-Handler in der aufrufenden Prozedur verwenden und dort den Fehler 2501 abfangen und ignorieren.

Gruß

Christian
#100
Bericht / Re: Laufzeitfehler 2501 'Die A...
Letzter Beitrag von Gockel67 - Juni 20, 2026, 10:54:33
Moin Gemeinde,

nochmal ich. Hab den Fehler gefunden.
Ich weiß nicht wie es passieren konnte - aber plötzlich war mein Etikettendrucker als Standarddrucker eingstellt.
Wieder auf den normalen umgestellt und alles funktioniert.
Vielleicht ist die Info für andere Suchende mal interessant.

Wünsche allen ein schönes Wochenende
Jörg