0
I am using a calendar that, regardless of the changes I make, always returns the date mm/dd/yyy when it is intended to be dd/mm/yyyy.
The code below is not mine, was removed from the net:
Option Explicit
Dim vDateSelectedVar As Date
Public Property Get SelectDate() As Date
SelectDate = vDateSelectedVar
End Property
Private Sub UserForm_Initialize()
'A data inicial é a atual:
lblHoje = "Hoje: " & Format(Date, "dd/MM/aaaa")
sb = Year(Date) * 12 + Month(Date)
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Impede que se dê Unload no formulário, caso contrário a linha que testa
'frm.Tag na linha seguinte do módulo mdlCalendário dará erro, pois o objeto
'deixará de existir. Ao invés de dar Unload, usa-se Hide para o objeto
'continuar a existir na memória.
If CloseMode = vbFormControlMenu Then
Cancel = True
Hide
End If
End Sub
Private Sub lblHoje_Click()
'Quando se clica no Label do dia atual, o calendário atualiza-se
'para o mês atual.
'O modo de cálculo do mês em questão é o número de meses.
'Como um ano possui 12 meses, o valor da ScrollBar é o número
'total de meses:
sb = Year(Date) * 12 + Month(Date)
End Sub
Private Sub sb_Change()
'Deve-se atualizar o calendário ao alterar a ScrollBar.
'O valor do calendário é uma divisão inteira (observe o símbolo \)
'de anos e o resto do valor por 12 como mês:
Atualizar DateSerial(sb \ 12, sb Mod 12, 1)
End Sub
Private Sub Atualizar(dt As Date)
'Rotina que atualiza todos os Label do calendário
Dim l As Long
Dim c As Long
Dim cInício As Long
Dim dtDia As Date
Dim ctrl As control
lblMêsAno = Format(dt, "mmmm yyyy")
For l = 1 To 6 'Linhas do calendário
For c = 1 To 7 'Colunas do calendário
Set ctrl = Controls("l" & l & "c" & c)
'O entendimento da linha abaixo é fundamental para entender como todos os
'labels foram povoados:
dtDia = DateSerial(Year(dt), Month(dt), (l - 1) * 7 + c - Weekday(dt) + 1)
ctrl.Caption = Format(Day(dtDia), "00")
ctrl.Tag = dtDia
'Dias de um mês diferente do mês visualizado ficarão na cor cinza claro:
If Month(dtDia) <> Month(dt) Then
ctrl.ForeColor = &H808080
Else
ctrl.ForeColor = &H0
End If
'Realçar dia atual presente, caso esteja visível no calendário:
If dtDia = Date Then
ctrl.ForeColor = &HFF&
End If
Next c
Next l
End Sub
what could be wrong? Excel is the 2016 in Windows 10.
Are you using VBA? Which code did you use to convert? Where is the error? I think I could improve the question using your code to facilitate the answer.
– Evert
I’m not sure, but what could be wrong is the use of
DateSerial
. Because VBA uses the American standard of dates, always causing many errors when another standard is adopted...– danieltakeshi