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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Специфические буквы?
 
 автор: Bruno   (14.12.2009 в 15:00)   личное сообщение
38 Кб.
 
 

У меня OS Windows XP Office 2003 professional 3SP. В интернете нашел пример “сумма прописью” (.mdb формате на русском языке). Пытался преобразить на литовский язык в VB Tools/Options/Editor Format, выбрав Font (речь идёт о специфических буквах балтийской языковой группы). Решил, что переведу слова с русского на литовский язык простым переводом и тем самым решить вопрос. VB принимает специфические буквы, но вот в форме отражаются совсем другие буквы. Перебрал все возможные фразы, ключевые слова в “google”, чтобы как-то подступиться к индексированной теме. Ничего не нашел, помогите, пожалуйста, разобраться. Спасибо, жду.

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

а msgbox SumPropisi(123) что выдаёт - нормальные слова?

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

Попробовать ещё регтональные настройки виндовс

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

А ваще то раз такая специфика
=================================
Вопрос: Сумма прописью (универсальная)

Совет:
Сумма Прописью
АВТОР: Дмитрий Милосердов mailto:dimonm@yahoo.com

Универсальная функция суммы прописью с учетом 5-и знаков после запятой. Понимает женский, средний и мужской род.

Пример находится здесь dm_SummaProp.zip (51 Kb MSA 97).

'===========================================================================
'АВТОР: Дмитрий Милосердов mailto:dimonm@yahoo.com
'
'Вы можете свободно использовать его в своих программах если сочтете полезным.
'Всякие гарантии по поводу его работоспособности и возможные последствия
'работы модуля автор с себя снимает (хотя таковых не должно быть).
'=============================================================================
'УНИВЕРСАЛЬНАЯ ФУНКЦИЯ ВЫВОДА ЧИСЛА (включающая в себя также дробные числа) ПРОПИСЬЮ
'на русском языке
'=============================================================================
Public Function SummaPropis(Num As Variant, String1 As String, String234 As String, StringOther As String, StringChego As String, sPol As String, Optional sPadezh As String, Optional sImen As String, Optional sRodit As String, Optional sDatel As String, Optional sVinit As String, Optional sTvorit As String, Optional sPredl As String) As String
'ВХОДНЫЕ ПАРАМЕТРЫ -
'NUM - число, для вывода прописью
'максимальное число 999 999 999 999 999,99999 (999 триллионов)
'анализируются только 5 знаков после запятой (стотысячная) ибо для
'финансовых расчетов в полне хватает 4 знаков (Currency), максимум до 5

'String1 - "одна что? - штука"
'Strin234 - "две, три, четыре чего? - штуки"
'StringOther - "пять, шесть, семь, 100, 355, и т.д чего? - штук"
'StringChego - "одна десятая чего? - штуки"
'sPol - "пол штуки какой? - женский ("ж")" - может быть "м","ж","с" (средний)
'ОСТАЛЬНЫЕ ПАРАМЕТРЫ ОПЦИОНАЛЬНЫ И ПОКА НЕ РЕАЛИЗОВАНЫ
'ЗАРЕЗЕРВИРОВАНЫ ДЛЯ ДАЛЬНЕЙШЕГО РАЗВИТИЯ (анализ падежей)
'на выходе строчка с текстовым представлением числа (прописью)
'Примеры использования в конце модуля
Dim Hundreds As Integer
Dim Thousands As Integer
Dim Millions As Integer
Dim Milliards As Integer
Dim Trillions As Integer
Dim lDlina As Long

Dim lCel As Variant
Dim sCel As String
Dim lDec As Variant
Dim sDec As String

If IsNull(Num) Then
SummaPropis = ""
Exit Function
End If

If Num = 0 Then
SummaPropis = ""
Exit Function
End If
If Num < 0 Then SummaPropis = "минус "
Num = Abs(Num)
lCel = Fix(Num)
lDec = Round(Num - lCel, 5)
'MsgBox (lDec)
Hundreds = 0
Thousands = 0
Millions = 0
Milliards = 0


sCel = Str(lCel)
lDlina = Len(sCel)
If lCel > 999999999999999# Then
SummaPropis = "слишком большое число! по модулю >999 триллионов"
Exit Function
End If
Hundreds = Val(Right(sCel, 3))
If lCel > 999 Then
Select Case lDlina
Case 3
Thousands = 0
Case 4
Thousands = Val(Left(sCel, 1))
Case 5
Thousands = Val(Left(sCel, 2))
Case Else
Thousands = Val(Mid(sCel, lDlina - 5, 3))
End Select
End If
If lCel > 999999 Then
Select Case lDlina
Case 6
Millions = 0
Case 7
Millions = Val(Left(sCel, 1))
Case 8
Millions = Val(Left(sCel, 2))
Case Else
Millions = Val(Mid(sCel, lDlina - 8, 3))
End Select
End If
If lCel > 999999999 Then
Select Case lDlina
Case 9
Milliards = 0
Case 10
Milliards = Val(Left(sCel, 1))
Case 11
Milliards = Val(Left(sCel, 2))
Case Else
Milliards = Val(Mid(sCel, lDlina - 11, 3))
End Select
End If
If lCel > 999999999999# Then
Select Case lDlina
Case 12
Trillions = 0
Case 13
Trillions = Val(Left(sCel, 1))
Case 14
Trillions = Val(Left(sCel, 2))
Case Else
Trillions = Val(Mid(sCel, lDlina - 14, 3))
End Select
End If


If lCel = 0 And lDec <> 0 Then
SummaPropis = SummaPropis & "ноль целых "
Else
SummaPropis = SummaPropis & SummaPropisTriada(Trillions, "триллион", "триллиона", "триллионов", "м") & SummaPropisTriada(Milliards, "миллиард", "миллиарда", "миллиардов", "м") & SummaPropisTriada(Millions, "миллион", "миллиона", "миллионов", "м") & SummaPropisTriada(Thousands, "тысяча", "тысячи", "тысяч", "ж") & IIf(lDec = 0, IIf(Hundreds = 0 And lCel > 999, SummaPropisTriada(Hundreds, String1, String234, StringOther, sPol, True), SummaPropisTriada(Hundreds, String1, String234, StringOther, sPol)), SummaPropisTriada(Hundreds, "целая", "целых", "целых", "ж"))
End If


If lDec <> 0 Then
lDlina = Len(Str(lDec)) - 2
lDec = Val(Right(Str(lDec), Len(Str(lDec)) - 2))
sDec = LTrim(Str(lDec))

Hundreds = Val(Right(sDec, 3))
If lDec > 999 Then
Select Case lDlina
Case 3
Thousands = 0
Case 4
Thousands = Val(Left(sDec, 1))
Case 5
Thousands = Val(Left(sDec, 2))
Case Else
Thousands = Val(Mid(sDec, lDlina - 5, 3))
End Select
Else
Thousands = 0
End If
If lDec > 999999 Then
Select Case lDlina
Case 6
Millions = 0
Case 7
Millions = Val(Left(sDec, 1))
Case 8
Millions = Val(Left(sDec, 2))
Case Else
Millions = Val(Mid(sDec, lDlina - 8, 3))
End Select
Else
Millions = 0
End If
If lDec > 999999999 Then
Select Case lDlina
Case 9
Milliards = 0
Case 10
Milliards = Val(Left(sDec, 1))
Case 11
Milliards = Val(Left(sDec, 2))
Case Else
Milliards = Val(Mid(sDec, lDlina - 11, 3))
End Select
Else
Milliards = 0
End If
If lDec > 999999999999# Then
Select Case lDlina
Case 12
Trillions = 0
Case 13
Trillions = Val(Left(sDec, 1))
Case 14
Trillions = Val(Left(sDec, 2))
Case Else
Trillions = Val(Mid(sDec, lDlina - 14, 3))
End Select
Else
Trillions = 0
End If

SummaPropis = SummaPropis & SummaPropisTriada(Trillions, "триллион", "триллиона", "триллионов", "м") & SummaPropisTriada(Milliards, "миллиард", "миллиарда", "миллиардов", "м") & SummaPropisTriada(Millions, "миллионн", "миллионна", "миллионнов", "м") & SummaPropisTriada(Thousands, "тысяча", "тысячи", "тысяч", "ж") & SummaPropisTriada(Hundreds, Choose(lDlina, "десятая", "сотая", "тысячная", "десятитысячная", "стотысячная", "миллионная", "милиардная", "трилионная"), Choose(lDlina, "десятых", "сотых", "тысячных", "десятитысячных", "стотысячных", "миллионных", "милиардных", "трилионных"), Choose(lDlina, "десятых", "сотых", "тысячных", "десятитысячных", "стотысячных", "миллионных", "милиардных", "трилионных"), "ж") & SummaPropisTriada(Hundreds, StringChego, StringChego, StringChego, sPol, True)

End If

End Function

Function SummaPropisTriada(ByVal lTriada As Long, String1 As String, String234 As String, StringOther As String, sPol As String, Optional IsNumHidden As Boolean = False) As String
'Вспомогательная функция для главной функции - SummaPropis
'переводит в текстовое представление число, длина которого <= 3
'(триаду)
'lTriada - триада (123, 1, 0, 22, 987 и т.д.)
'Первое слово - "одна что? - штука"
'Второе слово - "две, три, четыре чего? - штуки"
'Третье слово - "пять, шесть, семь, 100, 355, и т.д чего? - штук"
'Четвертое слово - "одна десятая чего? - штуки"
'Пятое слово - "пол штуки какой? - женский ("ж")"
'
'Последний параметр опциональный:
'TRUE - НЕ ВЫДАВАТЬ ЧИСЛО ПРОПИСЬЮ, а выдавать только предмет подсчета
'FALSE (по умолчанию) - ВЫДАВАТЬ И ЧИСЛО и ПРЕДМЕТ подсчета
'Например SummaPropisTriada(52,"книга","книги","книг","книги","ж",False)
' Вернет "пятьдесят две книги"
' (так же как и SummaPropisTriada(52,"книга","книги","книг","книги","ж"))
' А SummaPropisTriada(52,"книга","книги","книг","книги","ж",True)
' Просто вернет "книги"

Dim l1 As Long
Dim l10 As Long
Dim l100 As Long
Dim bMale As Boolean
Dim iPol As Integer
SummaPropisTriada = ""
If lTriada = 0 And Not IsNumHidden Then Exit Function
l1 = 0
l10 = 0
l100 = lTriada \ 100
l10 = lTriada - l100 * 100
l1 = lTriada - l100 * 100 - (l10 \ 10) * 10
Select Case sPol
Case "м"
iPol = 1
Case "ж"
iPol = 2
Case "с"
iPol = 3
Case Else
iPol = 1
End Select

If l100 <> 0 And Not IsNumHidden Then
SummaPropisTriada = Choose(l100, "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
SummaPropisTriada = SummaPropisTriada & " "
End If

If l10 = 10 Then
If Not IsNumHidden Then SummaPropisTriada = SummaPropisTriada & "десять"
SummaPropisTriada = SummaPropisTriada & " " & StringOther & " "
Exit Function
Else
If l10 >= 11 And l10 <= 19 Then
If Not IsNumHidden Then SummaPropisTriada = SummaPropisTriada & Choose(l1, "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
SummaPropisTriada = SummaPropisTriada & " " & StringOther & " "
Exit Function
Else
If Not IsNumHidden Then
SummaPropisTriada = SummaPropisTriada & Choose(l10 \ 10, "", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто")
SummaPropisTriada = SummaPropisTriada & " "
End If
End If

End If
If l1 <> 0 Then
If Not IsNumHidden Then
SummaPropisTriada = SummaPropisTriada & Choose(l1, Choose(iPol, "один", "одна", "одно"), Choose(iPol, "два", "две", "два"), "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
SummaPropisTriada = SummaPropisTriada & " "
End If
End If
If lTriada <> 0 Then
SummaPropisTriada = SummaPropisTriada & Choose(l1 + 1, StringOther, String1, String234, String234, String234, StringOther, StringOther, StringOther, StringOther, StringOther)
SummaPropisTriada = SummaPropisTriada & " "
End If
If lTriada = 0 And IsNumHidden Then
SummaPropisTriada = SummaPropisTriada & StringOther
SummaPropisTriada = SummaPropisTriada & " "
End If
End Function
Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
'ЕЩЕ ОДНА ВСПОМОГАТЕЛЬНАЯ ФУНКЦИЯ (НЕ МОЯ!), округляет указанное число, до указанной точности
'Here 's the version I recently wrote that solves that last issue. I've
'sent this in to Advisor to post as an errata. I think this will work
'now... <g> -- Ken
Dim dblPower As Double
Dim varTemp As Variant
Dim intSgn As Integer

If Not IsNumeric(Number) Then
' Raise an error indicating that
' you've supplied an invalid parameter.
Err.Raise 5
End If
dblPower = 10 ^ NumDigits
' Do the major calculation.
varTemp = CDec(Number) * dblPower + 0.5

' Now round to nearest even, if necessary.
If UseBankersRounding Then
' Is this a negative number, or not?
' intSgn will contain -1, 0, or 1.
intSgn = Sgn(Number)
varTemp = Abs(varTemp)
If Int(varTemp) = varTemp Then
If varTemp Mod 2 = 1 Then
' If working with a negative number,
' add 1. If working with a
' positive number, subtract one.
' That's what "- intSgn" will do.
varTemp = _
intSgn * (varTemp - intSgn)
End If
End If
End If
' Finish the calculation.
Round = Int(varTemp) / dblPower
End Function


'===================
'Функция для примера
'===================
Public Function SummaPropisQty(Num As Variant) As String
'Выдает кол-во штук
'Num -число
'Первое слово - "одна что? - штука"
'Второе слово - "две, три, четыре чего? - штуки"
'Третье слово - "пять, шесть, семь, 100, 355, и т.д чего? - штук"
'Четвертое слово - "одна десятая чего? - штуки"
'Пятое слово - "пол штуки какой? - женский ("ж")"
SummaPropisQty = SummaPropis(Num, "штука", "штуки", "штук", "штуки", "ж")
End Function
Public Function SummaPropisUSD(Num As Variant) As String
'Выдает кол-во долларов США
SummaPropisUSD = SummaPropis(Num, "доллар США", "доллара США", "долларов США", "доллара США", "м")
End Function
Public Function SummaPropisRUR(Num As Variant) As String
'Выдает кол-во рублей
SummaPropisRUR = SummaPropis(Num, "рубль", "рубля", "рублей", "рубля", "м")
End Function
Public Function SummaPropisYen(Num As Variant) As String
'Выдает кол-во Иен
SummaPropisYen = SummaPropis(Num, "японская Иена", "японских Иены", "японских Иен", "японской Иены", "ж")
End Function
Public Function SummaPropisDM(Num As Variant) As String
'Выдает кол-во немецких марок
SummaPropisDM = SummaPropis(Num, "немецкая марка", "немецких марки", "немецких марок", "немецкой марки", "ж")
End Function
Public Function SummaPropisCrocodile(Num As Variant) As String
'Выдает кол-во крокодилов ;-)
SummaPropisCrocodile = SummaPropis(Num, "крокодил", "крокодила", "крокодилов", "крокодила", "м")
'если поставить пол крокодила "ж" - получится забавно ;-)
End Function


================================================
Может это как то поможет.............

  Ответить  
 
 автор: Гамлет   (14.12.2009 в 19:46)   личное сообщение
 
 

регтональные настройки виндовс - Administrative - Change system laalize... - изменить язык на литовский - это для Висты

  Ответить  
 
 автор: Bruno   (14.12.2009 в 21:00)   личное сообщение
 
 

Пробовал:
• Regional and Language Options (OS Windows);
• Language Settings (Microsoft Office 2003);
• Editor Format/Font (Microsoft VB);
• Перепробовал все шрифты, в которых есть нужные буквы (Verdana, Tahoma, Arial и др.)

Ничего не получилось. Попытаюсь еще раз изложить суть своей просьбы, (для наглядности прикладываю db). В VB Tools/Options/Editor Format/Font вместо шрифта Verdana (Cyrillic) меняю на Verdana (Baltic). После чего появляется возможность в модуле (коде) менять слово “шесть” на литовское слово “&#0154;e&#0154;i” = 6 и, казалась бы, все предельно просто. Но мы получаем слова “Pepi”. Почему?

  Ответить  
 
 автор: Bruno   (14.12.2009 в 21:34)   личное сообщение
5 Кб.
 
 

В предыдущем сообщении было употреблено слово на литовском языке “&#0154;e&#0154;i”.

  Ответить  
 
 автор: Bruno   (14.12.2009 в 21:36)   личное сообщение
28 Кб.
 
 

для наглядности прикладываю db

  Ответить  
 
 автор: Lukas   (14.12.2009 в 21:44)   личное сообщение
5 Кб.
 
 

И что Вы собирались увидеть в поле, если в коде у Вас Это:

Или это у меня "перевернулось"?

  Ответить  
 
 автор: Bruno   (14.12.2009 в 22:14)   личное сообщение
 
 

Прошу меня извенить, проделайте пожалуйста это действие VB Tools/Options/Editor Format/Font вместо шрифта Verdana (Cyrillic) поменяйте на Verdana (Baltic).

  Ответить  
 
 автор: Lukas   (14.12.2009 в 22:27)   личное сообщение
 
 

ОК, понял.
Возможно, проблема с кодовой страницей?

  Ответить  
 
 автор: Bruno   (14.12.2009 в 22:38)   личное сообщение
 
 

Буду благодарен, если Вы мне объясните, что конкретно делать. Может быть, эта тема обсуждалась в других форумах?

  Ответить  
 
 автор: Lukas   (14.12.2009 в 22:50)   личное сообщение
 
 

Теорию можно посмотреть здесь: http://firsthand.ru/node/26
А вот практики у меня такой не было, так что извините, помочь не смогу. Удачи.

  Ответить  
 
 автор: Bruno   (14.12.2009 в 23:00)   личное сообщение
 
 

Спасибо всем за участие и помощь.

  Ответить  
 
 автор: kot_k_k   (15.12.2009 в 09:53)   личное сообщение
 
 

Ошибочка!!!
не знаю как на литовском в Литве, а на литовском на Украине слово пишется вот так
ChrW(&H15D) & "e" & ChrW(&H15D) & "i", - а не &h0154.

девствительно принаписании в лоб буквами выводит Pepi
при задании

 Case 6:   strOne = ChrW(&H15D) & "e" & ChrW(&H15D) & "i"

получаем нужный результат
просто пропиши через коды все проблемные буквы - один-то раз.
коды берутся из Word - вставить символ Unicode шест. набор расширенная латиница.


и язык и стандарты тут не причем - после переставил на русский, так же работает.
видимо как всегда БГ и его товарищи налажали.

  Ответить  
 
 автор: Bruno   (15.12.2009 в 23:35)   личное сообщение
 
 

Спасибо, kot_k_k, очень сильно помог.

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