Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Дату текстом
 
 автор: Lukas   (16.12.2008 в 15:47)   личное сообщение
 
 

Лет 5 назад срочно понадобилась такая функция, по-быстрому сваял:

Public Function funDateText(datDate As Date) As String
    Dim varDay As Variant
    Dim varMonth As Variant
    Dim varYear As Variant
    Dim intYear As Integer
    Const conYear As String = "две тысячи "
    intYear = Year(datDate)
    Select Case intYear
        Case 2001 To 2020
            funDateText = ""
            varDay = Array("", "Первое ", "Второе ", "Третье ", "Четвертое ", "Пятое ", "Шестое ", "Седьмое ", _
                                "Восьмое ", "Девятое ", "Десятое ", "Одиннадцатое ", "Двеннадцатое ", _
                                "Тринадцатое ", "Четырнадцатое ", "Пятнадцатое ", "Шестнадцатое ", "Семнадцатое ", _
                                "Восемнадцатое ", "Девятнадцатое ", "Двадцатое ", "Двадцать первое ", _
                                "Двадцать второе ", "Двадцать третье ", "Двадцать четвертое ", "Двадцать пятое ", _
                                "Двадцать шестое ", "Двадцать седьмое ", "Двадцать восьмое ", "Двадцать девятое ", _
                                "Тридцатое ", "Тридцать первое ")
            varMonth = Array("", "января ", "февраля ", "марта ", "апреля ", "мая ", "июня ", "июля ", "августа ", _
                                "сентября ", "октября ", "ноября ", "декабря ")
            varYear = Array("", "первого ", "второго ", "третьего ", "четвертого ", "пятого ", "шестого ", _
                                "седьмого ", "восьмого ", "девятого ", "десятого ", "одиннадцатого ", "двенадцатого ", _
                                "тринадцатого ", "четырнадцатого ", "пятнадцатого ", "шестнадцатого ", "семнадцатого ", _
                                "восемнадцатого ", "девятнадцатого ", "двадцатого ")
            funDateText = varDay(Day(datDate)) & varMonth(Month(datDate)) & conYear & varYear(intYear - 2000) & "года"
        Case Else
            funDateText = "Дата вне интервала функции"
    End Select
End Function


Может кому попадалось более красивое решение?

  Ответить  
 
 автор: час   (16.12.2008 в 15:50)   личное сообщение
 
 

может вот это?


Function MESDate(MyMES As Variant) As String

Dim MyMonth As String
Dim MyMonthNom As Integer

'If Not IsMONTH(MyMES) Then MESDate = " ": Exit Function
On Error GoTo MESDate_Error
'-------------------------------------------------------------------------------
MyMonthNom = MyMES
Select Case MyMonthNom
    Case 1:  MyMonth = " Январь "
    Case 2:  MyMonth = " Февраль "
    Case 3:  MyMonth = " Март "
    Case 4:  MyMonth = " Апрель "
    Case 5:  MyMonth = " Май "
    Case 6:  MyMonth = " Июнь "
    Case 7:  MyMonth = " Июль "
    Case 8:  MyMonth = " Август "
    Case 9:  MyMonth = " Сентябрь "
    Case 10: MyMonth = " Октябрь "
    Case 11: MyMonth = " Ноябрь "
    Case 12: MyMonth = " Декабрь "
End Select

MESDate = MyMonth & " месяц. "

'-------------------------------------------------------------------------------
On Error GoTo 0
Exit Function
MESDate_Error:
Call Zapis_ERR("Dat_MOD" & "процедура->" & "MESDate", Err.Number, Err.Description)
MESDate = " "
    
End Function

  Ответить  
 
 автор: час   (16.12.2008 в 15:51)   личное сообщение
 
 

Ой нет не то


Function jsDocDate(MyDate As Variant) As String
Dim MyMonth As String
Dim MyMonthNom As Integer
'-------------------------------------------------------------------------------
On Error GoTo jsDocDateErr
If Not IsDate(MyDate) Then jsDocDate = Chr$(171) & "_____" & Chr$(187) & "_________________ 20___ г.": Exit Function
MyMonthNom = Month(MyDate)
Select Case MyMonthNom
    Case 1:  MyMonth = " января "
    Case 2:  MyMonth = " февраля "
    Case 3:  MyMonth = " марта "
    Case 4:  MyMonth = " апреля "
    Case 5:  MyMonth = " мая "
    Case 6:  MyMonth = " июня "
    Case 7:  MyMonth = " июля "
    Case 8:  MyMonth = " августа "
    Case 9:  MyMonth = " сентября "
    Case 10: MyMonth = " октября "
    Case 11: MyMonth = " ноября "
    Case 12: MyMonth = " декабря "
End Select
jsDocDate = Chr(171) & Format(Day(MyDate), "00") & Chr(187) & _
MyMonth & Year(MyDate) & "г."
Exit Function
jsDocDateErr:
    jsDocDate = ""
'-------------------------------------------------------------------------------

End Function



А число прописью

  Ответить  
 
 автор: Lukas   (16.12.2008 в 15:54)   личное сообщение
 
 

Опять не то.

  Ответить  
 
 автор: час   (16.12.2008 в 15:57)   личное сообщение
 
 

тебе просто число - прописью надо - да?

  Ответить  
 
 автор: час   (16.12.2008 в 15:59)   личное сообщение
 
 


Public e(10)
Public de(10)
Public d(10)
Public s(10)
Public t(10)
Public dt(10)
Public dtt(10)
Public st(10)
Public mil(10)
Public dmil(10)

Public m(10): Public sk: Public zn: Public DL: Public hislo
Public mn As Integer
Function обраб()

'==================  Сумма прописью ==========================================
'Это я сам насочинял вроде работает
                                     If DL = 1 Then sk = Right(hislo, 1): один
         If DL = 2 And Mid(hislo, 1, 1) = "1" Then sk = Mid(hislo, 2, 1): два
         If DL = 2 And Mid(hislo, 1, 1) = "0" Then sk = Mid(hislo, 2, 1): один
      If DL = 2 And Val(Mid(hislo, 1, 1)) > 1 Then sk = Mid(hislo, 1, 1): дес
                                    If DL = 3 Then sk = Mid(hislo, 1, 1): сот
                                    If DL = 4 Then sk = Mid(hislo, 1, 1): тыс
       If DL = 5 And (Mid(hislo, 1, 1)) = "1" Then sk = Mid(hislo, 2, 1): тыся
      If DL = 5 And Val(Mid(hislo, 1, 1)) > 1 Then sk = Mid(hislo, 1, 1): дтыс
         If DL = 5 And Mid(hislo, 1, 1) = "0" Then sk = Mid(hislo, 1, 1): дтыс
         If DL = 6 And Mid(hislo, 1, 1) = "1" Then sk = Mid(hislo, 1, 1): Стыс
      If DL = 6 And Val(Mid(hislo, 1, 1)) > 1 Then sk = Mid(hislo, 1, 1): Стыс
         If DL = 6 And Mid(hislo, 1, 1) = "0" Then sk = Mid(hislo, 1, 1): Стыс
         If DL = 7 And Mid(hislo, 1, 1) = "1" Then sk = Mid(hislo, 1, 1): милл
     If DL = 7 And Val(Mid(hislo, 1, 1)) > 1 Then sk = Mid(hislo, 1, 1): милл
  If DL = 8 And Val(Mid(hislo, 2, 1)) > 1 Then sk = Mid(hislo, 2, 1): дмилл
      If DL = 8 And (Mid(hislo, 2, 1)) = "0" Then sk = Mid(hislo, 2, 1): дмилл


End Function



Function один()
zn = zn & " " & e(sk)
End Function
Function два()
zn = zn & " " & de(sk)
End Function
Function дес()
zn = zn & " " & d(sk)
DL = DL - 1
hislo = Right(hislo, DL)
обраб
End Function
Function сот()
zn = zn & " " & s(sk)
DL = DL - 1
hislo = Right(hislo, DL)
обраб
End Function
Function тыс()
zn = zn & " " & t(sk)
DL = DL - 1
hislo = Right(hislo, DL)
обраб
End Function
Function тыся()
zn = zn & " " & dt(sk)
DL = DL - 2
hislo = Right(hislo, DL)
обраб
End Function
Function дтыс()
zn = zn & " " & dtt(sk)
If InStr(1, zn, "миллион") = 0 And Mid(hislo, 2, 1) = "0" Then zn = zn & " тысяч"
DL = DL - 1
hislo = Right(hislo, DL)
обраб
End Function
Function Стыс()
zn = zn & " " & st(sk)
If InStr(1, zn, "миллион") <> 0 And Mid(hislo, 2, 1) = "0" Then zn = zn & " тысяч"
DL = DL - 1
hislo = Right(hislo, DL)
обраб

End Function
Function милл()
zn = zn & " " & mil(sk)
DL = DL - 1
hislo = Right(hislo, DL)
обраб

End Function
Function дмилл()
zn = zn & " " & dmil(sk)

DL = DL - 2
hislo = Right(hislo, DL)
обраб
End Function



может из этого можно вырезать - без миллионов.....  

  Ответить  
 
 автор: час   (16.12.2008 в 16:04)   личное сообщение
 
 

Дык у тебя лучшее будет, чё ты её не любишь-то?

  Ответить  
 
 автор: Lukas   (16.12.2008 в 16:06)   личное сообщение
 
 

Ограниченный интервал 2001-2020 годами. А если понадобится 1999 г.?

  Ответить  
 
 автор: час   (16.12.2008 в 16:09)   личное сообщение
 
 

тада скрещивай - будет любой интервал.............

  Ответить  
 
 автор: Lukas   (16.12.2008 в 16:03)   личное сообщение
 
 

тебе просто число - прописью надо - да?
Нет. Дату полностью прописью.

  Ответить  
 
 автор: час   (16.12.2008 в 16:05)   личное сообщение
 
 

тада у тебя - самая лучшая функца........
а то придётся две скрещивать.

  Ответить  
 
 автор: час   (16.12.2008 в 16:21)   личное сообщение
 
 

Прекрассная функция тока varYear
Надо функцу добавить число прописью
и вот это убрать funDateText = "Дата вне интервала функции"
И красотыща....

  Ответить  
 
 автор: час   (16.12.2008 в 16:29)   личное сообщение
 
 

ползовать


Me.дата = Date
DoCmd.Maximize
e(1) = "один"
e(2) = "два"
e(3) = "три"
e(4) = "четыре"
e(5) = "пять"
e(6) = "шесть"
e(7) = "семь"
e(8) = "восемь"
e(9) = "девять"
de(0) = "десять"
de(1) = "одиннадцать"
de(2) = "двенадцать"
de(3) = "тринадцать"
de(4) = "четырнадцать"
de(5) = "пятнадцать"
de(6) = "шестнадцать"
de(7) = "семнадцать"
de(8) = "восемнадцать"
de(9) = "девятнадцать"
d(2) = "двадцать"
d(3) = "тридцать"
d(4) = "сорок"
d(5) = "пятьдесят"
d(6) = "шестьдесят"
d(7) = "семьдесят"
d(8) = "восемьдесят"
d(9) = "девяносто"

s(1) = "сто"
s(2) = "двести"
s(3) = "триста"
s(4) = "четыреста"
s(5) = "пятьсот"
s(6) = "шестьсот"
s(7) = "семьсот"
s(8) = "восемьсот"
s(9) = "девятьсот"
t(1) = "одна тысяча"
t(2) = "две тысячи"
t(3) = "три тысячи"
t(4) = "четыре тысячи"
t(5) = "пять тысяч"
t(6) = "шесть тысяч"
t(7) = "семь тысяч"
t(8) = "восемь тысяч"
t(9) = "девять тысяч"
dt(0) = "десять тысяч"
dt(1) = "одиннадцать тысяч"
dt(2) = "двенадцать тысяч"
dt(3) = "тринадцать тысяч"
dt(4) = "четырнадцать тысяч"
dt(5) = "пятнадцать тысяч"
dt(6) = "шестнадцать тысяч"
dt(7) = "семнадцать тысяч"
dt(8) = "восемнадцать тысяч"
dt(9) = "девятнадцать тысяч"
dtt(2) = "двадцать"
dtt(3) = "тридцать"
dtt(4) = "сорок"
dtt(5) = "пятьдесят"
dtt(6) = "шестьдесят"
dtt(7) = "семьдесят"
dtt(8) = "восемьдесят"
dtt(9) = "девяносто"


st(1) = "сто"
st(2) = "двести"
st(3) = "триста"
st(4) = "четыреста"
st(5) = "пятьсот"
st(6) = "шестьсот"
st(7) = "семьсот"
st(8) = "восемьсот"
st(9) = "девятьсот"

mil(1) = "один миллион"
mil(2) = "два миллиона"
mil(3) = "три миллиона"
mil(4) = "четыре миллиона"
mil(5) = "пять миллионов"
mil(6) = "шесть миллионов"
mil(7) = "семь миллионов"
mil(8) = "восемь миллионов"
mil(9) = "девять миллионов"

dmil(0) = "десять миллионов"
dmil(1) = "одиннадцать миллионов"
dmil(2) = "двенадцать миллионов"
dmil(3) = "тринадцать миллионов"
dmil(4) = "четырнадцать миллионов"
dmil(5) = "пятнадцать миллионов"
dmil(6) = "шестнадцать миллионов"
dmil(7) = "семнадцать миллионов"
dmil(8) = "восемнадцать миллионов"
dmil(9) = "девятнадцать миллионов"
End Sub

  Ответить  
 
 автор: Мюллер   (16.12.2008 в 16:25)   личное сообщение
 
 


а то придётся две скрещивать.

Лысенки с Вавиловыми и Мичуриными отдыхают после таких срещиваний :)))

  Ответить  
 
 автор: Lukas   (16.12.2008 в 16:30)   личное сообщение
 
 

  Ответить  
 
 автор: час   (16.12.2008 в 16:34)   личное сообщение
 
 

  Ответить  
 
 автор: час   (16.12.2008 в 16:35)   личное сообщение
 
 

Этот код хотел в отладчике глянуть, точек останова штук десять понатыкал, а прога работает и певать хотела на эти точки......
Крутая прога получилась - фиг вскроешь.........

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList