Hallo mal wieder,
ich habe diese Makro gefunden hier und mir angepasst auf meine Ziele.
Es war ursprünglich für Zeilen ausblenden gedacht.
Ich brauchte es aber für Spalten ausblenden.
Funktioniert auch für das was ich wollte.
In der betroffenen Mappe sind aber 2 Arbeitsblätter (Bereich1 und Bereich2).
hätte jemand Ideen oder Tips, das es gleichzeitig in den 2 Blättern ausgeführt wird ?
ich bedanke mich schon mal im vorraus bei Euch
Sub unbezahltausblenden()
'
' unbezahltausblenden Makro
'
'
Dim xRg As Range
Application.ScreenUpdating = False
For Each xRg In Range("I7")
If xRg.Value = "" Then
xRg.EntireColumn.Hidden = True
Else
xRg.EntireColumn.Hidden = False
End If
Next xRg
Application.ScreenUpdating = True
Range("A3").Activate
End Sub
Wieso willst Du das gleichzeitig auf den Blättern ausführen? Ich weiß da keinen Ansatz. Hintereinander ginge, aber das ist ja nicht gefragt.
ich würde gerne die Spalte I, per 1 mal Klick auf beiden Blättern ausblenden.
Hallo,
wenn es auch nacheinander sein darf, z.B. so:
Code:
Sub unbezahltausblenden()
'
' unbezahltausblenden Makro
'
'
Dim xRg As Range
Application.ScreenUpdating = False
For Each xRg In Worksheets("Bereich1").Range("I7")
xRg.EntireColumn.Hidden = xRg.Value = ""
Next xRg
For Each xRg In Worksheets("Bereich2").Range("I7")
xRg.EntireColumn.Hidden = xRg.Value = ""
Next xRg
Application.ScreenUpdating = True
End Sub
Gruß Uwe
Hi,
Code:
Sub UnbezahltAusblenden()
Dim Blatt As Worksheet
For Each Blatt In Worksheets(Array("Bereich1", "Bereich2"))
With Blatt.Range("I7")
.EntireColumn.Hidden = .Value = ""
End With
Next Blatt
End Sub
wobei ich ja auf den Klick verzichten würde.
Dazu in den Code-Bereich der jeweiligen Tabelle folgendes einfügen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
With Range("I7")
If Not Intersect(Target, .Precedents) Is Nothing Then
.EntireColumn.Hidden = .Value = ""
End If
End With
End Sub
Uwe und Helmut
danke Euch vielmals und werde ich gleich probieren.
an HKindler
wie meinst du das mit dem Klick verzichten ?
wird unbezahlt vom Arbeitgeber angeboten muss die Spalte da sein, wird es nicht angeboten dann soll sie weg aus den Listen.
also je nach Bedarf
jetzt hab ich schon wieder
überm Kopf
habe es jetzt noch mal etwas geändert,durch google Recherche und stoße schon wieder an die Grenze.
Code:
Sub leereausblenden()
'
' leereausblenden Makro
'
Balken.Show 0
Dim r As Long
Application.ScreenUpdating = False
For r = 13 To 300
If Cells(r, 4).Value = "" Then Cells(r, 4).EntireRow.Hidden = True
Call Balkenupdaten(r, 300)
Next r
Application.ScreenUpdating = True
Unload Balken
End Sub
jetzt versuche ich schon wieder krampfhaft auf 2 Blättern gleichzeitig auszuführen.
mein Ansatz war das einzufügen
Dim sh as Worksheets
If sh.Name <> "Suche" Then
Next
Hi Brian,
da bin ich dir ja noch eine Antwort schuldig...
(23.09.2022, 15:13)BrianMolko1980 schrieb: [ -> ]wie meinst du das mit dem Klick verzichten ?
wird unbezahlt vom Arbeitgeber angeboten muss die Spalte da sein, wird es nicht angeboten dann soll sie weg aus den Listen.
also je nach Bedarf
Bei meiner letzten Routine reagiert das Makro automatisch, sobald eine der Zellen geändert wird, auf die sich I7 bezieht (und sich somit der Wert in I7 ändert). Sprich du brauchst gar nichts mehr händisch machen.
Zu deinem neuen Problem: Was soll denn ein
Next ohne zugehöriges
For? Üblicherweise geht man durch Blätter und bearbeitet nur bestimmte:
Code:
Dim Blatt As Worksheet
For Each Blatt In ThisWorkbook.Worksheets
If Blatt.Name <> "Suche" Then
'mach was
End If
Next Blatt
Hier werden alle Blätter außer dem Blatt "Suche" bearbeitet. Es gibt natürlich auch noch andere Methoden die Blätter zu bestimmen. Bei komplexen Sachen ist Select-Case ganz praktisch:
Code:
Select Case Blatt.Name
Case "Eins", "Drei"
'mach was
Case "Zwei"
'mach was anderes
Case Else
'mach dies bei allen übrigen Blättern
End Select
Statt etwas zu tun, kann man bei Bedarf auch einfach gar nichts machen.
Hab es jetzt mal so probiert, bei deinen Versuchen HKindler bekomme ich immer Meldungen zum debuggen.
Code:
Sub leereausblenden()
'
' leereausblenden Makro
'
Dim Blatt As Worksheet
For Each Blatt In ThisWorkbook.Worksheets
If Blatt.Name <> "Suche" Then
Balken.Show 0
Dim r As Long
Application.ScreenUpdating = False
For r = 13 To 300
If Cells(r, 4).Value = "" Then Cells(r, 4).EntireRow.Hidden = True
Call Balkenupdaten(r, 300)
Next r
Application.ScreenUpdating = True
End If
Unload Balken
Next Blatt
End Sub
Jetzt wird es im aktiven Arbeitsblatt aber nicht in dem anderen ausgeführt
Hi Brian,
(02.10.2022, 19:29)BrianMolko1980 schrieb: [ -> ]bei deinen Versuchen HKindler bekomme ich immer Meldungen zum debuggen.
Das hilft beim Helfen ungefähr genauso gut wie wenn ich dir antworte "dann mach es richtig".
Bei welchen Versuchen? Auf welchen Code genau bezieht sich deine Aussage? Welche Meldung kommt an welcher Stelle? Was wird blau oder gelb im VBA-Editor hinterlegt? Welchen Inhalt haben zu dem Zeitpunkt die einzelnen Variablen?
(02.10.2022, 19:29)BrianMolko1980 schrieb: [ -> ]Jetzt wird es im aktiven Arbeitsblatt aber nicht in dem anderen ausgeführt
Mit
Cells(r, 4).xxx sprichst du ein unspezifisches Blatt an, da es gar keine Blattangabe gibt. Daher versucht VBA das Blatt zu erraten. Meist wird das ActiveSheet verwendet. Wenn du ein bestimmte Blatt ansprechen willst, dann musst du auch sagen welches. Oder mit anderen Worten gesprochen:
referenziere die Zelle vollständig mit
Blatt.Cells(r, 4).xxx
Wenn dein Code dann mal läuft, wird es Zeit, ihn zu verbessern:
- ScreenUpdating braucht man bei vernünftiger Programmierung normalerweise nicht auszuschalten
- dazu die Zeilen nicht einzeln ausblenden, sondern alle auf einmal:
Blatt.Range("D13:D300").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True ersetzt alles zwischen deinen ScreenUpdating-Zeilen, Sollte das nicht funktionieren, z.B. weil die Zellen nicht wirklich leer sind, sondern eine Formel drin steht, die "" ausgibt, dann solltest du die Zellen mit
Set Leerzellen = Union(Leerzellen, Blatt.Cells(r, 4)) sammeln und dann gemeinsam ausblenden. Bei der ersten leeren Zelle wird das noch nicht funktionieren, da die Variable Leerzellen noch leer ist. Das musst du natürlich abfangen und diese Zelle der Variablen Leerzellen direkt (ohne Union) zuweisen.