2013-11-21 3 views

ответ

1

Это то, что вы пытаетесь?

Sub Sample() 
    Debug.Print ConvertTodate(#12/13/2012#) 
    Debug.Print ConvertTodate(#12/12/2012#) 
    Debug.Print ConvertTodate(#12/14/2012#) 
    Debug.Print ConvertTodate(#12/23/2012#) 
    Debug.Print ConvertTodate(Now) 
End Sub 

Function ConvertTodate(d As Date) As String 
    Dim suff As String 
    Dim dt As String 

    dt = Format(d, "mmmm dd, yyyy") 

    Select Case Day(d) 
     Case 0 To 10, 20 To 31 
      Select Case Right(Day(d), 1) 
       Case 1: suff = "st," 
       Case 2: suff = "nd," 
       Case 3: suff = "rd," 
       Case 0, 4 To 9: suff = "th," 
      End Select 
     Case 11 To 20: suff = "th," 
    End Select 

    ConvertTodate = Replace(dt, Day(d) & ",", Day(d) & suff) 
End Function 

enter image description here

Примечание: На основе вашего регионального настройки, вы, возможно, придется использовать что-то другое вместо запятой.

+0

'Nice @SiddharthRout :-) Мозговой ход, похоже, дал хорошие результаты, но Я должен был запустить его в буквальном смысле, чтобы понять, почему это неправильно :-) - Jean-François Corbett 3 мин назад '@ Jean-FrançoisCorbett: Извините, пришлось оставить комментарий здесь, поскольку это сообщение было удалено. Поверьте мне, вы не хотели бы знать, как я смутился, когда понял, что мой предыдущий код не сработал, или # 12/12/2012 #: P У вас не было выбора, кроме как принять ответ и переработать на нем! –

1

Это должно сработать. Я запустил это в окне VBA Immediate.

?Format(Now(),"mmmm dd, yyyy") 
November 21, 2013 
+1

У меня тоже было это, но я не мог получить «st» и «nd» и «rd» и «th» s, чтобы отобразить – MyNameIsKhan