Print side | Luk vindue

Udfordring med datoer i VBA

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=4556
Udskrevet den: 29.Apr.2024 kl. 04:32


Emne: Udfordring med datoer i VBA
Besked fra: Miltoft
Emne: Udfordring med datoer i VBA
Posteringsdato: 03.Jun.2021 kl. 11:32
Hej med Jer

Jeg sidder med et større Excel ark der registrerer nogle reklamationer. Til det vil jeg gerne have excel til at angive hvornår en reklamation er Low, Medium, High, Critical.

Dette skal være udfra følgende kriterier:

Low: - Dato for oprettelse (registreret med Timestamp) er lig med dd. 
- Totalen af kostprisen er under 3000 kr.
- Der er anført en test i Action 1 (Felt)

Medium: - Dato for oprettelse (registreret med Timestamp) er ældre end dd. + 2 dage 
- Totalen af kostprisen er lig med 3000 kr.
- Der er anført en test i Action 1 & 2 (Felt)

High: - Dato for oprettelse (registreret med Timestamp) er ældre end dd. + 5 dage 
- Totalen af kostprisen er højere end 3000 kr.
- Der er anført en test i Action 1, 2 & 3  (Felt)

Critical: - Dato for oprettelse (registreret med Timestamp) er ældre end dd. + 7 dage 
- Totalen af kostprisen er højere 3000 kr.
- Der er anført en test i Action 1, 2 & 3 (Felt)

Jeg har fået det meste af det til at virke. Men det med datoerne kan jeg simpelthen ikke få til at virke. Kan I evt. hjælpe mig?

Evt. optimeringer af koden er hjertens velkommen, da jeg stadig er ny i denne form for kodning.

H29 = Timestamp
C25 = Today()

Min kode ser således ud:

Private Sub Claim_Importance()
    
    If Range("C25").Value = Range("H29").Value Or Range("AA29").Value > 3000 Or Range("AD29").Value > 0 Then
        Range("C29").Value = "Low"
End If
    
    If Range("H29").Value + 2 > Range("C25").Value Or Range("AE29").Value > 0 Or Range("AA29").Value = 3000 Then
        Range("C29").Value = "Medium"
End If
    
    If Range("H29").Value + 5 > Range("C25").Value Or Range("AF29").Value > 0 Or Range("AA29").Value > 3000 Then
        Range("C29").Value = "High"
End If
    
    If Range("H29").Value + 7 > Range("C25").Value Then
        Range("C29").Value = "Critical"
End If
  
    If Range("AA29").Value > 3000 Then
        Range("C29").Value = "Needs Approval"
        
ElseIf Range("H29").Value = "" Then
        Range("C29").Value = ""
    
End If
End Sub


De bedste hilsner

Daniel 



Svar:
Besked fra: Svensmarke
Posteringsdato: 03.Jun.2021 kl. 17:47
Hej Miltoft
Som jeg forstår opgaven er du nødt til, enten i din VBA-kode at lægge en trigger ind der sørger for at dine værdier hele tiden opdateres, idet jeg går ud fra at kriterierne Low, Medium o.s.v. ændrer sig med tiden, eller løse opdateringsproblematikken med  Hvis-formler i stedet. 
Personligt ville jeg løse den med Hvis-formler af typen 'HVIS(IDAG()-H29<1;"Low";Hvis(.........))', eventuelt indlagt i din VBA-kode, men afhænger naturligvis af datamængde.
Hvis-formlen kan blive lang, så tungen må holdes lige i munden :).
vh. Peter


Besked fra: Ib Hansen
Posteringsdato: 04.Jun.2021 kl. 21:26
Det er lidt svært at forstå hvad det er du vil og hvad du mener..

Hvor skal koderne bruges?
I en Userform eller på en knap?
Eller skal de laves som excel koder direkte i arket?

/topic662.html" rel="nofollow - /topic662.html - upload altid et eksempel, som folk kan se og arbejde med.
Ellers er det næsten umuligt at vide, hvad du mener.

Men i en VBA kode skal en dato altid formatteres i koden.

--------------------
Og Peter.
Dags Dato ændres hver dag, når arket åbnes.
Der har du din trigger.



-------------
Excel 2010 Dk og 2019 Dk på samme computer.
Bruger dog stadig mest 2010..
Men sådan er der jo så majet :o)



Print side | Luk vindue