Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1100to1104
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
Inhaltsverzeichnis

Code optimieren - verschiedene Bereiche abarbeiten

Code optimieren - verschiedene Bereiche abarbeiten
Peter
Guten Tag
Nachfolgender Code blendet mir in zwei verschiedenen Worksheets (einmal in demjenigen mit dem Bereich bEinAus und in demjenigen mit Bereich bvEinAus).
Dieser Code diente ursprünglich nur dem Ein-/Ausblenden in einer Tabelle, dann habe ich einfach den Code nochmals angehängt mit der 2. Bereichsdefinition.
Wie kann ich meinen Code optimieren, dass ich nicht zweimal praktisch den gleichen Code habe. Vielleicht kommt ja noch ein dritter und einer vierter dazu.
Ideal wäre beispielsweise, wenn ich in der Tabelle mit Namen "SpaltenEinAus" in der Spalte A, beginnend in Zeile 2 die entsprechenden Bereichsnamen, die ein resp. ausgeblendet werden sollen, eintragen könnte. Im Moment würde dort in Zelle A2 bEinAus und in Zelle A3 bvEinAus stehen.
Wer kann mir helfen?
Danke und Gruss, Peter
Sub SwitcherunbenutzteSpalten()
Dim rngC As Range, rngHide As Range
For Each rngC In [bEinAus].EntireRow.Cells
If rngC.value = 0 Then
If rngHide Is Nothing Then
Set rngHide = rngC
Else
Set rngHide = Union(rngHide, rngC)
End If
End If
Next rngC
If Not rngHide Is Nothing Then _
rngHide.EntireColumn.Hidden = Not rngHide.EntireColumn.Hidden
Set rngHide = Nothing
For Each rngC In [bvEinAus].EntireRow.Cells
If rngC.value = 0 Then
If rngHide Is Nothing Then
Set rngHide = rngC
Else
Set rngHide = Union(rngHide, rngC)
End If
End If
Next rngC
If Not rngHide Is Nothing Then _
rngHide.EntireColumn.Hidden = Not rngHide.EntireColumn.Hidden
Set rngHide = Nothing
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Code optimieren - verschiedene Bereiche abarbeiten
11.09.2009 09:04:54
Luschi
Hallo Peter,
versuch es mal so:

Sub SwitcherUnbenutzteSpalten()
Dim rngC As Range, rngHide As Range, rngAll As Range, i As Integer
For i = 1 To 2
If i = 1 Then
Set rngAll = [bEinAus]
Else
Set rngAll = [bvEinAus]
End If
For Each rngC In rngAll.EntireRow.Cells
If rngC.Value = 0 Then
If rngHide Is Nothing Then
Set rngHide = rngC
Else
Set rngHide = Union(rngHide, rngC)
End If
End If
Next rngC
If Not rngHide Is Nothing Then
rngHide.EntireColumn.Hidden = Not rngHide.EntireColumn.Hidden
End If
Set rngHide = Nothing
Set rngC = Nothing
Set rngAll = Nothing
Next i
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Code optimieren - verschiedene Bereiche abarbeiten
11.09.2009 12:05:56
Peter
Hallo Luschi
Vielen Dank. Wenn ich richtig verstanden habe, wird das Ein- / Ausblenden nun entweder im einen oder anderen Worksheet vorgenommen. Eigentlich möchte ich, dass jeweils bei beiden, resp. mehreren Tabellen bei Anwählen des Makros ein- oder ausgeblendet wird.
In der hochgeladenen Datei habe ich drei Tabellen, bei denen Spalten ein- resp. ausgeblendet werden sollen. In der entsprechenden Zeile habe ich jeweils einen Namen vergeben, nämlich bEinAus, bvEinAus und bfEinAus.
Diese Namen habe ich in einem weiteren Tabellenblatt ("SpaltenEinAus")ab Zelle A2 eingetragen. Nach Möglichkeit möchte ich alle Bereiche ein-/ausblenden, die im Tabellenblatt "SpaltenEinAus" ab Zelle A2 stehen. Optimal wäre es, wenn ich die Datei beliebig mit weiteren Tabellen erweitern könnte und weitere Namen in Tabellenblatt "SpaltenEinAus" anfügen könnte, die dann beim "Ein-/Aus" Befehl auch berücksichtigt werden.
Kannst du mir da auch auf die Sprünge helfen?
Danke und Gruss, Peter
https://www.herber.de/bbs/user/64335.xls
Anzeige
benannte Bereiche ein- und ausblenden
14.09.2009 18:27:07
Erich
Hi Peter,
meinst du das so?

Option Explicit
Sub SwitcherUnbenutzteSpalten()
Dim varN, zz As Long, rngAll As Range, rngC As Range, rngHide As Range
With Sheets("SpaltenEinAus")                          ' Namenliste einlesen
varN = Application.Transpose( _
.Cells(2, 1).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row - 1))
End With
For zz = 1 To UBound(varN)                            ' Namenliste abarbeiten
Set rngAll = ActiveWorkbook.Names(varN(zz)).RefersToRange
For Each rngC In rngAll.EntireRow.Cells
If rngC.Value = 0 Then
If rngHide Is Nothing Then
Set rngHide = rngC
Else
Set rngHide = Union(rngHide, rngC)
End If
End If
Next rngC
If Not rngHide Is Nothing Then
rngHide.EntireColumn.Hidden = Not rngHide.EntireColumn.Hidden
Set rngHide = Nothing
End If
Next zz
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: benannte Bereiche ein- und ausblenden
14.09.2009 22:48:06
Peter
Hallo Erich
Vielen Dank für deine Lösung. Das funktioniert einwandfrei In der Zwischenzeit habe ich selbst eine Lösung zusammenbasteln können, die soweit ich das erkennen kann, das gleiche bewirkt (vgl. nachstehend).
Gruss, Peter
Sub SwitcherUnbenutzteSpalten()
'Version Peter
Dim rngSource As Range, rngC As Range, rngHide As Range, rngRangeName As Range, i As Integer
With Sheets("SpaltenEinAus")
Set rngSource = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
For Each rngRangeName In rngSource    'einzelne Namen von benannten Bereichen
For Each rngC In Range(rngRangeName.Value).EntireRow.Cells 'einzelne Zellen  _
des benannten Bereiches
If rngC.Value = 0 Then
If rngHide Is Nothing Then
Set rngHide = rngC
Else
Set rngHide = Union(rngHide, rngC)
End If
End If
Next rngC
If Not rngHide Is Nothing Then
rngHide.EntireColumn.Hidden = Not rngHide.EntireColumn.Hidden
End If
Set rngHide = Nothing
Set rngC = Nothing
Set rngRangeName = Nothing
Next rngRangeName
End With
End Sub

Anzeige

286 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige