Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Vergleich Year(Date) mit Range

Betrifft: VBA Vergleich Year(Date) mit Range von: Andrea
Geschrieben am: 21.01.2021 16:44:11

Hallo zusammen,

ich habe u. a. folgende Codezeile

If Range("Jahr_SB") < 2019 Then
Range("Jahr_SB") ist 2019. Das Ergebnis der o. g. Prüfung ist lt. Debug.Print "Wahr"

Wieso ergibt
If Range("Jahr_SB") < Year(Date) Then
lt. Debug.Print "Falsch"?

Mir ist aufgefallen, dass Debug.Print Year(Date) nicht "2021" ergibt, sondern " 2021", also mit Leerschritt vorne. Liegt es daran? Wie kann ich das vermeiden?

Vielen Dank und schöne Grüße

Andrea

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Hajo_Zi
Geschrieben am: 21.01.2021 17:04:38

Hallo Andrea,

bei mir kommt Masgbox.
Sub n()
    If Range("Jahr_SB") < Year(Date) Then
        MsgBox 1
    End If
End Sub

Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.

Sollte die Datei verlinkt werden?

Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
ändern.

Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.

http://www.excel-ist-sexy.de/bilder-statt-datei/

Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.

Das ist nur meine Meinung zu dem Thema.

http://www.excel-ist-sexy.de/bilder-statt-datei/

Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.

Das ist nur meine Meinung zu dem Thema.

Falls Link nicht ausgeführt wird:
1. Link kopieren
2. rechte Maustaste neues Fenter.
3. Umschaltstaste drücken und Klick auf den Link
4. STRG+ Link mit Maus aktivieren

GrußformelHomepage

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Andrea
Geschrieben am: 21.01.2021 17:14:57

Hallo Hajo_Zi,

ehrlich gesagt bin ich jetzt genauso schlau wie vorher :-(

Gebe ich deinen Code in meine Datei ein, kommt eben keine Msgbox, weil das Ergebnis der If-Abfrage von VBA leider mit "falsch" ausgegeben wird, statt mit "wahr".

Das ist genau mein Problem. 2019 ist definitiv kleiner als 2021, aber mit der o. g. Codezeile kommt da falsch raus. Wie muss ich die Code-Zeile ändern, das das Ergebnis "wahr" lautet?

Danke und Gruß Andrea

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Hajo_Zi
Geschrieben am: 21.01.2021 17:18:33

Hallo Andrea,

frage jemand der neben Dir sitzt der sieht die Datei.
Die meisten hier sehen Sie nicht.
Da Sie nicht auf Deinen Rechner schauen.
Ich nbinm dann raus.
Viel Erfolg noch.


Gruß Hajo

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: onur
Geschrieben am: 21.01.2021 17:23:51

Poste die (Beispiels-) Datei.

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Andrea
Geschrieben am: 21.01.2021 17:53:10

Ich verzweifele.

Die Originaldatei kann ich nicht hochladen, da zu groß und wg. Datenschutz. Deshalb habe ich die Code-Zeile, die dort nicht funktioniert, in der hochgeladenen Datei nachgebaut. Dort geht es plötzlich!?

https://www.herber.de/bbs/user/143205.xlsm

Der Code meiner Originaldatei lautet:
Sub Jahr_für_JahresPlanErlös_an_RA_Einn_anpassen()
'
    Sheets("Jahres-Plan-Erlös").PivotTables("PivotTable1").PivotFields("[Datum].[Jahr].[Jahr]"). _
 _
        VisibleItemsList = Array("[Datum].[Jahr].&[" & Range("Jahr_SB") & "]")
        
    If Range("Jahr_SB") < 2019 Then
        MsgBox "Planerlöse wurden erstmals für 2019 gepflegt!", vbOKOnly + vbInformation, " _
HINWEIS"
    End If
    
    If Range("Jahr_SB") >= 2019 And Range("Jahr_SB") < Year(Date) Then
        Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Ja"
    End If
        
    If Range("Jahr_SB") >= Year(Date) And Range("Planungscube_aktuell") = "Nein" Then
        Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Nein"
    End If
        
    If Range("Jahr_SB") = Year(Date) And Range("Planungscube_aktuell") = "Ja" Then
        Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Ja"
        
        'Bedingte Formatierung für Spalte "Plan-Erlös(2)" in Tabelle "RA-Einn."
        Sheets("RA-Einn.").Select
        Range("E14:E1000").Select
        Selection.FormatConditions.Delete
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=$G$3=""Nein"""
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Font
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        Selection.FormatConditions(1).StopIfTrue = False
        Range("A3").Select
    End If
            
End Sub
Die erste If-Abfrage funktioniert noch, danach nicht mehr ...

Ich hoffe damit könnt ihr jetzt was anfangen.

Nochmals Danke und viele Grüße

Andrea

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: onur
Geschrieben am: 21.01.2021 18:04:59

"Ich hoffe damit könnt ihr jetzt was anfangen." - Nein.
Was sollen wir mit einer Beispielsdatei, wo es NICHT funktioniert?
Meine VERMUTUNG: in Range("Jahr_SB") ist ein TEXT, der aussieht wie eine Zahl.
Da in diesem Fall Range("Jahr_SB") als 0 behandelt werden würde, wäre
Range("Jahr_SB") < 2019

auch WAHR, aber
Range("Jahr_SB") > 2000

NICHT.
Nimm stattdesssen überall:
IF VAL(Range("Jahr_SB")) < 2019

oder
IF CLNG(Range("Jahr_SB") < 2019

ODER KORRIGIERE DEN FEHLER.

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Andrea
Geschrieben am: 22.01.2021 14:00:03

Lieber onur,

ich danke dir ganz herzlich
IF VAL(Range("Jahr_SB")) < 2019
war die Lösung!

Das WE ist gerettet :-)

Viele Grüße

Andrea

Betrifft: Gerne !
von: onur
Geschrieben am: 22.01.2021 14:01:33



Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Yal
Geschrieben am: 21.01.2021 18:20:36

Hallo Andrea,


Wenn Range("Jahr_SB") < 2019 wahr ist,

dann ist Range("Jahr_SB") = 2019 Falsch
und Range("Jahr_SB") >= 2019 auch

Wenn die Bedingung sich so schön auschliessen, kann man diese kaskadieren. Auch Prüfungen könnte man in boolsche Variablen lagern, um diese im Schritt-Modus besser sehen zu können (Lokale Fenster öffnen).
Prüfung einer Variable ggü verschiedene Werte kann man mit Select Case strukturieren
Sub Jahr_für_JahresPlanErlös_an_RA_Einn_anpassen()
Dim vor_Date As Boolean
Dim auf_Date As Boolean

    Sheets("Jahres-Plan-Erlös").PivotTables("PivotTable1").PivotFields("[Datum].[Jahr]. _ [Jahr] _
").VisibleItemsList = Array("[Datum].[Jahr].&[" & Range("Jahr_SB") & "]")
        
    vor_Date = Range("Jahr_SB") < Year(Date)
    auf_Date = Range("Jahr_SB") = Year(Date)
    
    If Range("Jahr_SB") < 2019 Then
        MsgBox "Planerlöse wurden erstmals für 2019 gepflegt!", vbOKOnly + vbInformation, " _
HINWEIS"
    ElseIf vor_Date Then
        Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Ja"
    ElseIf auf_Date Then
        Select Case Range("Planungscube_aktuell") 
        Case "Nein" 
            Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Nein"
        Case "Ja"
            Sheets("Jahres-Plan-Erlös").Range("D2").FormulaR1C1 = "Ja"
            'Bedingte Formatierung für Spalte "Plan-Erlös(2)" in Tabelle "RA-Einn."
            Sheets("RA-Einn.").Select
            Range("E14:E1000").Select
            Selection.FormatConditions.Delete
            Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$G$3=""Nein"""
            Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
            With Selection.FormatConditions(1).Font
                .ThemeColor = xlThemeColorDark1
                .TintAndShade = 0
                .StopIfTrue = False
            End With
            Range("A3").Select
        End Select
    End If
End Sub
VG
Yal

Betrifft: AW: VBA Vergleich Year(Date) mit Range
von: Andrea
Geschrieben am: 22.01.2021 14:01:42

HAllo Yal,

vielen Dank für deine Mühe. Konnte das Problem beheben.

Gruß Andrea