Macro datumformat onafhankelijk maken??

Status
Niet open voor verdere reacties.

ZiffNab

Gebruiker
Lid geworden
4 apr 2011
Berichten
6
Beste mensen...

Ik zit vast.... Ik heb voor een excell sheet een knopje gemaakt die alleen de records met een datum van vandaag laat zien.

Als ik dit bestand open met een excell versie waar het datumformat anders staat (non u.s.) werkt het niet meer en ik krijg het niet aan de gang...

in onderstaande macro wordt dDate gevuld met "6/26/2011"
Zolang deze waarde (precies) overeenkomt in de sheet gaat het goed, maar als het datumformat van die installatie dd/mm/yyyy is werkt het niet meer.

Iemand een idee? Alvast bedankt

Macro:

Code:
Sub FilterByDate()

Dim dDate As Date
Dim lDate As String
   
    dDate = DateSerial(Year(Date), Month(Date), Day(Date))
    lDate = dDate

    'ActiveSheet.AutoFilterMode = False
    Range("A1").AutoFilter Field:=29, Criteria1:=lDate

End Sub
 
Laatst bewerkt door een moderator:
Kennelijk is het formaat van de datums in kolom A afhankelijk van de regionale instellingen van Windows.
Je zult je macro dus daarop ook moeten aanpassen.
Je kunt bijvoorbeeld met de volgende opdracht ophalen wat de in Windows ingestelde landcode is:

Code:
Dim Landcode as Integer
Landcode = Application.International(xlCountrySetting)

Voor NL is de landcode 31, voor US is dat 1, UK is 44, de standaard ISO landcodes dus.
Je zou het als volgt kunnen gebruiken:

Code:
Select Case Application.International(xlCountrySetting)
    Case 1
        dDate = DateSerial(Year(Date), Month(Date), Day(Date))
    Case 31
        dDate = DateSerial(Year(Date), Day(Date), Month(Date))
End Select

Enzovoort.
Dit is een simpel voorbeeld, er zijn uiteraard meer mogelijkheden.
 
Laatst bewerkt:
Code:
dDate = DateSerial(Year(Date), Month(Date), Day(Date))
Dit is onzin, want het resultaat is hetzelfde als Date.

Voor systeemonafhankelijke invoer: gebruik de ISO-notatie: format("yyyy-mm-dd")

Voor autofilter gebruik clng(Date) (of 1*date)

Code:
Sub FilterByDate()
  Range("A1").AutoFilter 29, clng(date)
End Sub
 
Beetje jammer dat je dat als onzin bestempeld.
Ik dacht hier anders met elkaar om te gaan en zoals gezegd zijn er meerdere mogelijkheden.
 
@Ed

Je snapt de portée van de opmerking niet.
x=x is onzincode want een tautologie. Niemand zit te wachten op overbodige code; die valt uit de aard der zaak niet in de categorie 'verschillende mogelijkheden'.
 
Ik geloof je best maar dan nog kun je dat anders brengen. Dat bedoelde ik maar te zeggen.
 
In ieder geval alletwee bedankt voor de input, ik ga het morgen uitproberen! en meldt terug als ik het voor elkaar heb.
Edmoor's eerste tip hielp inderdaad niet, maar wel geleerd dat je de landcode kunt opvragen :)

Thanks!
 
Okee, Snb's methode geprobeerd maar het werkt nog niet helemaal....
De macro is nu als volgd:

Sub FilterByDate()

Dim dDate As Date
Dim lDate As Long

dDate = DateSerial(Year(Date), Month(Date), Day(Date))
lDate = dDate
'ActiveSheet.AutoFilterMode = False

Range("A1").AutoFilter 25, CLng(dDate)
End Sub

Ik krijg geen geselecteerde records..
Als ik een kopie maak van de datum kolom en die GEEN format geef en daarom selecteer werkt het wel.

Dus het lijkt erop dat hij vandaag "26-6-2011" vergelijkt met "40721"..

Hoe kan ik dit repareren (behalve die kopie laten bestaan en verstoppen?)

Alvast bedankt!
 
Zou je deze code eens kunnen proberen?
Bij mij werkt die wel.

Code:
Sub FilterByDate()

Range("A1").AutoFilter Field:=1, Criteria1:=DateValue(Format(Date, "dd-mm-yyyy"))

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan