ich komme mal wieder mit der Suche im Internet und mit Makrorekorder nicht weiter.
Ich habe eine Urlaubsliste mit ca. 130 Zeilen und ca. 260 Spalten.
Über ein UserForm mit 2 ComboBoxen und einem Commandbutton möchte ich einen Druckbereich definieren. Dazu müssen jeweils bestimmte Zeilen und Spalten ausgeblendet werden.
In der ComboBox3 werden alle Werte (doppelte nur einmal) des Zellbereiches B4:B122 (wobei in B122, die ausgeblendet ist, immer der Wert "Alle" steht) angezeigt und in ComboBox4 die einzelnen Monate.
Code:
Private Sub UserForm_Initialize()
ComboBox3.List = UniqueList(Worksheets("Urlaubsliste").Range("B4:B122"))
With Me.ComboBox4
.AddItem "Januar"
.AddItem "Februar"
.AddItem "März"
.AddItem "April"
.AddItem "Mai"
.AddItem "Juni"
.AddItem "Juli"
.AddItem "August"
.AddItem "September"
.AddItem "Oktober"
.AddItem "November"
.AddItem "Dezember"
End With
End Sub
' erzeugt aus einem Bereich ein Array ohne doppelte Werte
Function UniqueList(Matrix As Range) As Variant
Dim objDic As Object ' ein Dictionary-Objekt, benutzt werden nur die Keys, nicht die Werte
Dim rngCell As Range ' eine Zelle im Bereich
Set objDic = CreateObject("Scripting.Dictionary") ' das Dictionary erzeugen
For Each rngCell In Matrix ' alle Zellen des Bereichs durchlaufen
' im Dictionary dem Objekt mit dem Key rngCell.Value (das ist der Zellinhalt) 0 zuweisen
' falls dieses Objekt noch nicht existiert wird es automatisch angelegt
' falls es bereits existiert wird ihm erneut 0 zugewiesen
' -> in objDic gibt es keine doppelte Keys !!!
If rngCell.Value "" Then objDic(rngCell.Value) = 0
Next
UniqueList = objDic.keys ' das liefert nun ein Array mit allen Keys
Set objDic = Nothing
End Function
Ich möchte folgendes erreichen:In ComboBox3 wird ein beliebiger Wert oder "Alle" ausgewählt. In ComboBox4 wird ein Monat ausgewählt.
Wird in ComboBox3 ein beliebiger Wert ausgewählt sollen nur die Zeilen des Bereiches 4 bis 121 eingeblendet werden bei denen in der Spalte B dieser Wert steht. Wenn der Wert "Alle" ausgewählt wird sollen alle Zeilen des Bereichs 4 bis 121 eingeblendet werden bei denen in B ein Wert steht (Leerzellen sollen ausgeblendet werden).
In ComboBox4 muss ein Monat gewählt werden.
Bei Druck des CommandButtons2 sollen also alle bestimmten Zeilen und Spalten eingeblendet bleiben. Das ganze soll dann noch gedruckt werden und alle Zeilen und Spalten wieder eingeblendet werden.
Die einzelnen Makros für Spalten ausblenden habe ich mal versucht. Da kommt aber auch ein Fehler:
Option Explicit
Private Sub CommandButton3_Click()
Call AusblendenSpalten
Call Monate_einblenden
End Sub
Option Private Module
Public Sub AusblendenSpalten()
Columns("G:IW").EntireColumn.Hidden = True
End Sub
Option Private Module
Public Sub Monate_einblenden()
If ComboBox4.Value = "Januar" Then ' bleibt hier stehen (Laufzeitfehler 424)
Call Einblend_Januar
End If
If ComboBox4.Value = "Februar" Then
Call Einblend_Februar
End If
If ComboBox4.Value = "März" Then
Call Einblend_Maerz
'usw
End If
End Sub
Option Private Module
Public Sub Einblend_Januar()
Columns("G:AB").EntireColumn.Hidden = False
End Sub
Es gibt natürlich für Jeden Monat ein Makro fürs einblenden.Ich hoffe es ist verständlich und mir kann Jemand helfen. Insbesondere bei den Spalten einblenden am besten mit Einzelmakros, damit ich das Druckmakro selbst dazu basteln kann (also über Call Makro).
Beispielmappe: https://www.herber.de/bbs/user/89426.xlsm
Vielen Dank fürs lesen.
mfg, Andreas