Clever-Excel-Forum

Normale Version: 1 Makro in 2 Blättern gleichzeitig ausführen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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  Heart




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.  100

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  Huh  überm Kopf

Undecided Undecided Undecided
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 Sad
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 Sad
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.