Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1348to1352
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Zeilen und Spalten einblend mit Comboboxen
25.02.2014 17:13:14
Andreas
Hallo Excelprofis!
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen Comboboxen teilw. gelöst
26.02.2014 17:54:59
Andreas
Hallo Excelprofis,
das Problem mit dem ausblenden bzw einblenden der Spalten habe ich gelöst. Auch das Problem der Zeileneinblendung bei Auswahl "Alle".

Option Explicit
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Call AusblendenSpalten
Select Case ComboBox3.Text
Case "Alle"
Call EinAusblendenZeilen
End Select
Select Case ComboBox4.Text
Case "Januar"
Call Einblend_Januar
Case "Februar"
Call Einblend_Februar
Case "März"
Call Einblend_Maerz
Case "April"
Call Einblend_April
Case "Mai"
Call Einblend_Mai
Case "Juni"
Call Einblend_Juni
Case "Juli"
Call Einblend_Juli
Case "August"
Call Einblend_August
Case "September"
Call Einblend_September
Case "Oktober"
Call Einblend_Oktober
Case "November"
Call Einblend_November
Case "Dezember"
Call Einblend_Dezember
End Select
Application.ScreenUpdating = True
End Sub


Option Private Module
Public Sub Einblend_Januar()
Columns("G:AB").EntireColumn.Hidden = False
End Sub


Public Sub EinAusblendenZeilen()
Dim zelle As Range
Dim bereich As Range
Set bereich = ActiveSheet.Range("B4:B121")
bereich.EntireRow.Hidden = True
'jede Zeile prüfen
For Each zelle In bereich
'wenn Zelleninhalt null, dann diese Zeile ausblenden
If zelle  "" Then
'Call FilternBereich
zelle.EntireRow.Hidden = False
End If
Next
Application.EnableEvents = True
End Sub

Mein einziges Problem ist jetzt noch:
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.
Kann mir Jemand die Lösung zeigen?
Danke fürs lesen!
mfg, Andreas

Anzeige
AW: Zeilen Comboboxen teilw. gelöst
27.02.2014 09:48:21
fcs
Hallo Andreas,
probiere es mal mit folgenden Anpassungen.
Der in der Combobox3 ausgewählte Wert wird dabei als Parameter an die "EinAusblendenZeilen"-Prozedur übergeben.
Gruß
Franz
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Call AusblendenSpalten
Call EinAusblendenZeilen(strWert:=Combobox3.Text)
Select Case ComboBox4.Text
'usw.
End Sub
Public Sub EinAusblendenZeilen(strWert As String)
Dim zelle As Range
Dim bereich As Range
Set bereich = ActiveSheet.Range("B4:B121")
bereich.EntireRow.Hidden = True
'jede Zeile prüfen
For Each zelle In bereich
'wenn Zelleninhalt null, dann diese Zeile ausblenden
If zelle  "" And (strWert = "Alle" Or zelle.Text = strWert) Then
'Call FilternBereich
zelle.EntireRow.Hidden = False
End If
Next
Application.EnableEvents = True
End Sub

Anzeige
Vielen Dank für die Hilfe, Klappt super. owT.
27.02.2014 12:04:24
Andreas
.

331 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige