Spalte ausblenden wenn...

Bild

Betrifft: Spalte ausblenden wenn... von: Miro
Geschrieben am: 07.03.2005 16:45:04

Hallo,

habe das folgende Makro:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
''Macro 1; header and footer''
    a = " " & Range("J112")
    b = " " & Range("J117")
    k = " " & Range("J122")
    d = " " & Range("J130")
    e = " " & Range("J135")
    f = " " & Range("J140")
  
    g = "&""TKTypeRegular,Fett""&12" & a
    h = "&""TKTypeRegular,Fett""&12" & b
    m = "&""TKTypeRegular,Fett""&12" & k
    j = "&""TKTypeRegular,Fett""&12" & d
    k = "&""TKTypeRegular,Fett""&12" & e
    l = "&""TKTypeRegular,Fett""&12" & f
    
    ActiveSheet.PageSetup.RightFooter = (g)
    ActiveSheet.PageSetup.CenterFooter = (h)
    ActiveSheet.PageSetup.LeftFooter = (m)
    ActiveSheet.PageSetup.RightHeader = (j)
    ActiveSheet.PageSetup.CenterHeader = (k)
    ActiveSheet.PageSetup.LeftHeader = (l)
    
''Macro 2; suppress columns''
    
Const Auswahlzelle = "F1"
Const Monatsüberschriften = "AD5:AQ5"
Dim i As Integer, c As Integer
Dim s_letzte As Range
Dim s_erste As Range
Dim s As Range
If Target.Address(0, 0) = Auswahlzelle Then
    Set s_erste = Range(Monatsüberschriften)(1)
    Set s_letzte = Range(Monatsüberschriften)(1).Offset(0, Range(Monatsüberschriften).Count - 1)
    Range(Monatsüberschriften).EntireColumn.Hidden = False
    For Each s In Range(Monatsüberschriften)
        If s.Value > Target.Value Then
            Range(s, s_letzte).EntireColumn.Hidden = True
            Exit For
        End If
    Next
    
End If
End Sub


Makro 1 (für Kopf- und Fußzeilen) und Makro 2 (Spalten werden ein/-ausgeblendet, wenn eine bestimmte Bedingung erfüllt ist) werden ausgeführt, sobald das aktive Areitsblatt geändert wird. Ich möchte nun, dass das Makro eins nach wie vor bei Änderungen im aktuellen Arbeitsblatt geändert wird. Makro 2 soll ausgeführt werden, sobald sich der Wert in Zelle F1 ändert. Der Wert in Zelle F1 greift nun wiederum auf eine andere Zelle in einem anderen Arbeitsblatt der gleichen Datei zu
(ich nenne es mal das Originärarbeitsblatt = OAB´). Ändere ich den Wert in der entsprechenden Zelle des OAB, so ändert sich natürlich auch der Wert in der Zelle F1. Das Makro versteht diese Veränderung der Zelle F1 allerdings nicht als Änderung, und wird entsprechend nicht ausgeführt. Wie kriege ich Makro 2 dazu, dass es reagiert, wenn sich der "verknüpfte Wert" in Zelle F1 ändert?

Danke für die Hilfe...

LG
Bild


Betrifft: AW: Spalte ausblenden wenn... von: Matthias G
Geschrieben am: 07.03.2005 17:26:56

Hallo Miro,

da F1 über eine Formel geändert wird, brauchst du das Worksheet_Calculate-Ereignis.

Dieses hat aber kein Argument (wie Target beim Change-Ereignis), so dass dein Makro bei jeder Neuberechnung ausgeführt werden muss.
Willst du das nicht, müsstest du in deinem "OAB" das Worksheet_Change-Ereignis auf die Ursprungszelle anwenden.

Gruß Matthias


Bild


Betrifft: AW: Spalte ausblenden wenn... von: Miro
Geschrieben am: 07.03.2005 17:52:03

Hallo Matthias,

wie wüde denn ein solcher Verweis auf die Zelle im OAB aussehen?

LG


Bild


Betrifft: AW: Spalte ausblenden wenn... von: Matthias G
Geschrieben am: 07.03.2005 17:58:48

Hallo Miro,

naja, angenommen in Tabelle1 Zelle F1 steht =Tabelle2!A1

dann im Codemudul von Blatt2:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
    Makro2 ' oder wie es auch immer heißt
End If
End Sub

Du prüfst also nicht, ob sich F1 in Blatt1 geändert hat, sonder, ob sich ein Element der Formel in F1 geändert hat (hier also A1 in Blatt2).

Gruß Matthias


Bild


Betrifft: AW: Spalte ausblenden wenn... von: Miro
Geschrieben am: 07.03.2005 18:17:30

Hallo Matthias,

habe es gerade ausprobiert, aber leider funktioniert es nicht.
Mir ist die Logik auch noch nicht so ganz klar:
Ich ändere das Makro in Blatt 2 (dem OAB). Wieso sollte das Makro in Blatt 1 (eben jenem Blat in dem sich der Bezug auf Blatt 2 befindet) plötzlich anders ablaufen.

Das Makro hätte dann die folgende Gestalt:

''Macro 2; suppress columns''

If Not Intersect(Target, Range("F1")) Is Nothing Then
Const Auswahlzelle = "F1"
Const Monatsüberschriften = "AD5:AQ5"

Dim i As Integer, c As Integer
Dim s_letzte As Range
Dim s_erste As Range
Dim s As Range

If Target.Address(0, 0) = Auswahlzelle Then

Set s_erste = Range(Monatsüberschriften)(1)
Set s_letzte = Range(Monatsüberschriften)(1).Offset(0, Range(Monatsüberschriften).Count - 1)
Range(Monatsüberschriften).EntireColumn.Hidden = False
For Each s In Range(Monatsüberschriften)
If s.Value > Target.Value Then
Range(s, s_letzte).EntireColumn.Hidden = True
Exit For
End If
Next

End If
End If


Die Zelle im OAB auf die sich die Formel bezieht ist ebenfalls F1.

LG


Bild


Betrifft: AW: Spalte ausblenden wenn... von: Matthias G
Geschrieben am: 07.03.2005 18:28:56

Hallo Miro,

dein Makro ist aus dem Worksheet_Change()-Prozedur "entrissen" und funktioniert so natürlich nicht.
Das Makro muss in ein "normales" Modul (z.B. Modul1) und könnte dann z.B. so aussehen:
Sub Makro2()
Const Auswahlzelle = "F1"
Const Monatsüberschriften = "AD5:AQ5"
Dim i As Integer, c As Integer
Dim s_letzte As Range
Dim s_erste As Range
Dim s As Range
With Sheets("Tabelle1")
    Set s_erste = .Range(Monatsüberschriften)(1)
    Set s_letzte = .Range(Monatsüberschriften)(1).Offset(0, .Range(Monatsüberschriften).Count - 1)
    .Range(Monatsüberschriften).EntireColumn.Hidden = False
    For Each s In .Range(Monatsüberschriften)
        If s.Value > .Range(Auswahlzelle).Value Then
            .Range(s, s_letzte).EntireColumn.Hidden = True
            Exit For
        End If
    Next
End With
End Sub
Gruß Matthias


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Spalte ausblenden wenn..."