philbo20
Goto Top

Excel: per VBA in Abhängigkeit von Wert Zeilen aus- oder einblenden

Hallo zusammen,

ich habe eine Excel-Tabelle, in der ich in einer Zelle ein Datum stehen habe.
Nun würde ich gerne folgendes lösen:

Ist das Datum in der Zelle = das heutige Datum, sollen die Zeilen 7 und 13 ausgeblendet werden.
Zeitgleich soll der Inhalt der Zellen A8 bis A12 in "1.", "2.", "3.", "4." und "5." geändert werden (war vorher 2. bis 6.).
Ist das Datum nicht das Tagesdatum, sollen die Zeilen eingeblendet bleiben (bzw. werden, falls sie es nicht sind).

Kann doch eigentlich nicht so schwer sein, oder?

Viele Grüße
Philipp

Content-Key: 252832

Url: https://administrator.de/contentid/252832

Printed on: April 19, 2024 at 22:04 o'clock

Member: colinardo
Solution colinardo Oct 23, 2014 updated at 11:22:11 (UTC)
Goto Top
Hallo Phillip,
im Beispiel steht dein Datum in Zelle A1
Sub CheckDate()
    Dim ws As Worksheet
    Set ws = Sheets(1)
    With ws
        'Wenn Zelle A1 = Heutiges Datum dann  
        If .Range("A1").Value = Date Then  
            'Neue Werte eintragen  
            cnt = 1
            For i = 8 To 12
                .Range("A" & i).Value = cnt & "."  
                cnt = cnt + 1
            Next
            'Zeilen 7 und 13 ausblenden  
            .Rows(7).Hidden = True
            .Rows(13).Hidden = True
        Else
            'Zeilen einblenden  
            .Rows(7).Hidden = False
            .Rows(13).Hidden = False
        End If

    End With
End Sub
Grüße Uwe
Member: philbo20
philbo20 Oct 23, 2014 at 09:27:06 (UTC)
Goto Top
Hi,
danke soweit schonmal. Irgendwie klappt es aber noch nicht...
liegt es daran, dass in der Zelle mit dem Datum eine Funktion steckt, die das Datum von einem anderen Tabellenblatt ermittelt???
Ich vermute, dass hier geprüft wird, ob die Formel = heutiges Datum ist. Aber das trifft ja niemals zu.
Zudem sollte nicht Zeile 7 bis 13 ausgeblendet werden, sondern nur 7 und 13.
Dann muss ich ws.Range(7).EntireRow.Hidden und ws.Range(13).EntireRow.Hidden = true setzen, oder?
Member: colinardo
colinardo Oct 23, 2014 updated at 09:38:59 (UTC)
Goto Top
Zitat von @philbo20:
liegt es daran, dass in der Zelle mit dem Datum eine Funktion steckt, die das Datum von einem anderen Tabellenblatt ermittelt???
ist oben dahingehend angepasst. Ich gehe davon aus das deine Zelle aber das Datumsformat hat ...
Zudem sollte nicht Zeile 7 bis 13 ausgeblendet werden, sondern nur 7 und 13.
OK das hatte ich missverstanden, sorry. Ist ebenfalls oben angepasst...

Grüße Uwe
Member: philbo20
philbo20 Oct 23, 2014 at 09:48:42 (UTC)
Goto Top
Hallo nochmal Uwe,

hmm irgendwie passiert gar nix, wenn ich den Code einfüge. Zwar keine Fehlermeldung, aber es wird auch nix ein oder ausgeblendet.
Ich habe zum Testen schonmal "If .Range("A1").Value = "23.10.2014"" eingetragen, allerdings passiert da auch nichts.
Gruß
Philipp
Member: colinardo
colinardo Oct 23, 2014 updated at 09:56:28 (UTC)
Goto Top
Zitat von @philbo20:
hmm irgendwie passiert gar nix, wenn ich den Code einfüge. Zwar keine Fehlermeldung, aber es wird auch nix ein oder
ausgeblendet.
Hast du das Sheet angepasst (Zeile 3) auf dem dies passieren, soll, läuft hier nämlich einwandfrei !
Ich habe zum Testen schonmal "If .Range("A1").Value = "23.10.2014"" eingetragen, allerdings passiert
Ist deine Datumszelle als Datum oder als Text formatiert ? Ich gehe hier vom Datumsformat aus ...
Member: philbo20
philbo20 Oct 23, 2014 updated at 10:00:14 (UTC)
Goto Top
Zitat von @colinardo:
Hast du das Sheet angepasst (Zeile 3) auf dem dies passieren, soll, läuft hier nämlich einwandfrei !

Nee, daran wird es wohl liegen.
Gebe ich die Nummer an, oder den Namen des Blatts?
Also z.B. Set ws = sheets("Test") ?

Die Zelle ist als Datum formatiert. Würde .Value nicht mit Text funktionieren?
Member: colinardo
colinardo Oct 23, 2014 updated at 10:06:11 (UTC)
Goto Top
Zitat von @philbo20:
Nee, daran wird es wohl liegen.
Gebe ich die Nummer an, oder den Namen des Blatts?
Also z.B. Set ws = sheets("Test") ?
Ja genau entweder als Text oder die Positionsnummer des Blattes.

Die Zelle ist als Datum formatiert. Würde .Value nicht mit Text funktionieren?
Nein, du müstest den Vergleich dann aber nicht mit Date machen sondern z.B. so
.Range("A1").Value = Format(Date, "dd.mm.yyyy")
Da du hier einen String vergleichst, denn Date liefert nämlich als Wert eine Zahl, und das ist der Fall wenn eine Zelle in Excel als Datum formatiert ist !
Member: philbo20
philbo20 Oct 23, 2014 at 10:06:48 (UTC)
Goto Top
Danke für deine Hilfe...es hat soweit jetzt funktioniert.
Aber komischer Weise nur, wenn ich im Codeeditor auf "ausführen" klicke bzw F5 drücke...
woran liegt das denn jetzt noch?? Hast du eine Idee.
Member: colinardo
Solution colinardo Oct 23, 2014 updated at 11:22:18 (UTC)
Goto Top
Zitat von @philbo20:

Danke für deine Hilfe...es hat soweit jetzt funktioniert.
Aber komischer Weise nur, wenn ich im Codeeditor auf "ausführen" klicke bzw F5 drücke...
woran liegt das denn jetzt noch?? Hast du eine Idee.
das hast du ja nicht gesagt das du diese Funktion so haben wolltest face-wink,ist aber kein Problem, dazu musst du den Code in den entsprechenden Codeabschnitt des Tabellenblatts verschieben und so anpassen:
(In Zeile 3 die Zelle anpassen auf dessen Änderungen die Überprüfung stattfinden soll):
Private Sub Worksheet_Change(ByVal Target As Range)
    'Range bei dem eine Änderung etwas bewirken soll  
    Set changeRange = Range("A1")  
    If Not Application.Intersect(changeRange, Target) Is Nothing Then
        CheckDate
    End If
End Sub

Sub CheckDate()
    Dim ws As Worksheet
    Set ws = Sheets(1)
    With ws
        'Wenn Zelle A1 = Heutiges Datum dann  
        If .Range("A1").Value = Date Then  
            'Neue Werte eintragen  
            cnt = 1
            For i = 8 To 12
                .Range("A" & i).Value = cnt & "."  
                cnt = cnt + 1
            Next
            'Zeilen 7 und 13 ausblenden  
            .Rows(7).Hidden = True
            .Rows(13).Hidden = True
        Else
            'Zeilen einblenden  
            .Rows(7).Hidden = False
            .Rows(13).Hidden = False
        End If

    End With
End Sub
Member: philbo20
philbo20 Oct 23, 2014 at 11:21:59 (UTC)
Goto Top
Zitat von @colinardo:
das hast du ja nicht gesagt das du diese Funktion so haben wolltest face-wink,ist aber kein Problem, dazu musst du den Code in den
entsprechenden Codeabschnitt des Tabellenblatts verschieben und so anpassen:
(In Zeile 3 die Zelle anpassen auf dessen Änderungen die Überprüfung stattfinden soll):

Stimmt, hatte ich nicht erwähnt face-smile

Muss auch eigentlich nur beim Öffnen geprüft werden, habe daher jetzt
Sub Workbook_Open() verwendet.

Da es mehrere Arbeitsblätter gibt, habe ich jetzt den auszublendenden Zeilen einen Namen (Zeilennummern sind unterschiedlich) gegeben und lasse sie mit .Range('Name") ein- bzw. ausblenden.

Danke dir vielmals für die Hilfe!

Gruß
Philipp