AW: Autofilter
09.05.2014 07:01:37
fcs
Hallo Moods,
die Vorgabe von Datumswerten für Suchfunktionen hat unter VBA leider so ihre Tücken. Das Ergebnis kann auch noch durch die Datumsformatierung in den Zellen negativ beeinflusst sein - suche funktioniert eigentlich nur reibungslos, wenn für das Datum die Formatierung "Datum kurz" benutzt wird.
Im Code wird es auch etwas übersichtlicher, wenn man Zwischenergebnisse in Variablen speichert.
Hier mal eine Anpassung deines Makros.
Wichtig ist auch, dass das Userform geschlossen/ausgeblendet wird, bevor der Druckerdialog angezeigt wird, falls du die Seitenvorschau dort startest kommt es sonst zu einem Problem.
Unter passenden Bedingungen, die bei dir erfüllt sein sollten, kannst du auch mit dem ListIndex-Wert des in der Combobox gewählten Eintrags arbeiten, um die zugehörige Zeile im Blatt zu ermitteln.
Gruß
Franz
'Variante 1 - Speicherung von Zwischenergebnissen in Variablen
Private Sub CommandButton1_Click()
' Druckdialog öffnen
Dim Spalte_2 As Long, Zelle As Range
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "Bitte erst ein Datum wählen"
Else
With Worksheets("Tabelle1")
Set Zelle = .Range("D17:D424").Find(what:=CDate(ComboBox1), lookat:=xlWhole)
If Zelle Is Nothing Then
MsgBox "Etwas hat mit der Auswahl des Datums nicht funktioniert!)"
Else
Spalte_2 = .Cells(1, .Columns.Count).End(xlToLeft).Column + 3
.PageSetup.PrintArea = .Cells(Zelle.Row, 1).Resize(70, Spalte_2).Address
Unload Me 'oder Me.Hide
Application.Dialogs(xlDialogPrint).Show
End If
End With
End If
End Sub
'Variante 2 - Startzeile aus dem Listindex des gewählten Datums ermitteln.
'funktioniert nur, wenn in D17:D424 und in der Combobox alle Tage fortlaufend und _
ohne Lücken gelistet sind
Private Sub CommandButton1_Click()
' Druckdialog öffnen
Dim Zeile_1 As Long, Spalte_2 As Long
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "Bitte erst ein Datum wählen"
Else
With Worksheets("Tabelle1")
Spalte_2 = .Cells(1, .Columns.Count).End(xlToLeft).Column + 3
Zeile_1 = 17 + Me.ComboBox1.ListIndex
.PageSetup.PrintArea = .Cells(Zeile_1, 1).Resize(70, Spalte_2).Address
Unload Me 'oder Me.Hide
Application.Dialogs(xlDialogPrint).Show
End With
End If
End Sub