КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Склонение фамилии, имени и отчества
Замена стандартного меню пользовательским Листинг 3.84. Создание пользовательского меню Sub CreateMenu() Dim cbrMenu As CommandBar Dim cbrcNewMenu As CommandBarControl
' Удаление меню, если оно уже есть Call DeleteMenu ' Добавление строки пользовательского меню Set cbrMenu = CommandBars.Add(MenuBar:=True) With cbrMenu .Name = "Моя строка меню" .Visible = True End With
' Копирование стандартного меню "Файл" CommandBars("Worksheet Menu Bar").FindControl(ID:=30002).Copy _ CommandBars("Моя строка меню")
' Добавление нового меню - "Дополнительно" Set cbrcNewMenu = cbrMenu.Controls.Add(msoControlPopup) cbrcNewMenu.Caption = "&Дополнительно"
' Добавление команды в новое меню With cbrcNewMenu.Controls.Add(msoControlButton) .Caption = "&Восстановить обычную строку меню" .OnAction = "DeleteMenu" End With ' Добавление команды в новое меню With cbrcNewMenu.Controls.Add(Type:=msoControlButton) .Caption = "&Справка" End With End Sub
Sub DeleteMenu() ' Пытаемся удалить меню (успешно, если оно ранее создано) On Error Resume Next CommandBars("Моя строка меню").Delete On Error GoTo 0 End Sub Листинг 3.85. Склонение ФИО Public Sub PossessiveCase() ' Склоняем ФИО в родительный падеж Dim strName1 As String, strName2 As String, strName3 As String strName1 = dhGetName(ActiveCell, 1) ' Выделяем имя strName2 = dhGetName(ActiveCell, 2) ' Выделяем фамилию strName3 = dhGetName(ActiveCell, 3) ' Выделяем отчество
' Если в ячейке менее трех слов - закрытие процедуры If strName1 = "" Or strName2 = "" Or strName3 = "" Then Exit Sub ' Склоняем Cells(ActiveCell.Row, ActiveCell.Column) = dhPossessive(_ strName1, strName2, strName3) End Sub
Public Sub DativeCase() ' Объявление переменных Dim strName1 As String, strName2 As String, strName3 As String strName1 = dhGetName(ActiveCell, 1) strName2 = dhGetName(ActiveCell, 2) strName3 = dhGetName(ActiveCell, 3) ' Если в ячейке менее трех слов - закрытие процедуры If Len(strName1) = 0 Or Len(strName2) = 0 Or Len(strName3) = 0 _ Then Exit Sub
Cells(ActiveCell.Row, ActiveCell.Column) = dhDative(_ strName1, strName2, strName3) End Sub
Function dhPossessive(strName1 As String, strName2 As String, _ strName3 As String) As String Dim fMan As Boolean ' Определяем, мужские ФИО или женские fMan = (Right(strName3, 1) = "ч")
' Склонение фамилии в родительный падеж If Len(strName1) > 0 Then If fMan Then ' Склонение мужской фамилии Select Case Right(strName1, 1) Case "о", "и", "я", "а" dhPossessive = strName1 Case "й" dhPossessive = Mid(strName1, 1, Len(strName1) - 2) + "ого" Case Else dhPossessive = strName1 + "а" End Select Else ' Склонение женской фамилии Select Case Right(strName1, 1) Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", _ "м", "н", "п", "р", "с", "т", "ф", "х", "ц", "ч", _ "ш", "щ", "ь" dhPossessive = strName1 Case "я" dhPossessive = Mid(strName1, 1, Len(strName1) - 2) & "ой" Case Else dhPossessive = Mid(strName1, 1, Len(strName1) - 1) & "ой" End Select End If dhPossessive = dhPossessive & " " End If ' Склонение имени в родительный падеж If Len(strName2) > 0 Then If fMan Then ' Склонение мужского имени Select Case Right(strName2, 1) Case "й", "ь" dhPossessive = dhPossessive & Mid(strName2, _ 1, Len(strName2) - 1) & "я" Case Else dhPossessive = dhPossessive & strName2 & "а" End Select Else ' Склонение женского имени Select Case Right(strName2, 1) Case "а" Select Case Mid(strName2, Len(strName2) - 1, 1) Case "и", "г" dhPossessive = dhPossessive & Mid(_ strName2, 1, Len(strName2) - 1) & "и" Case Else dhPossessive = dhPossessive & Mid(strName2, _ 1, Len(strName2) - 1) & "ы" End Select Case "я" If Mid(strName2, Len(strName2) - 1, 1) = "и" Then dhPossessive = dhPossessive & Mid(strName2, _ 1, Len(strName2) - 1) & "и" Else dhPossessive = dhPossessive & Mid(strName2, _ 1, Len(strName2) - 1) & "и" End If Case "ь" dhPossessive = dhPossessive & Mid(strName2, _ 1, Len(strName2) - 1) & "и" Case Else dhPossessive = dhPossessive & strName2 End Select End If dhPossessive = dhPossessive & " " End If ' Склонение отчества в родительный падеж If Len(strName3) > 0 Then If fMan Then dhPossessive = dhPossessive & strName3 & "а" Else dhPossessive = dhPossessive & Mid(strName3, 1, _ Len(strName3) - 1) & "ы" End If End If End Function
Function dhDative(strName1 As String, strName2 As String, _ strName3 As String) As String Dim fMan As Boolean ' Определяем, мужские ФИО или женские fMan = (Right(strName3, 1) = "ч")
' Склонение фамилии в дательный падеж If Len(strName1) > 0 Then If fMan Then ' Склонение мужской фамилии Select Case Right(strName1, 1) Case "о", "и", "я", "а" dhDative = strName1 Case "й" dhDative = Mid(strName1, 1, Len(strName1) - 2) + "ому" Case Else dhDative = strName1 + "у" End Select Else ' Склонение женской фамилии Select Case Right(strName1, 1) Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", _ "м", "н", "п", "р", "с", "т", "ф", "х", "ц", "ч", "ш", _ "щ", "ь" dhDative = strName1 Case "я" dhDative = Mid(strName1, 1, Len(strName1) - 2) & "ой" Case Else dhDative = Mid(strName1, 1, Len(strName1) - 1) & "ой" End Select End If dhDative = dhDative & " " End If ' Склонение имени в дательный падеж If Len(strName2) > 0 Then If fMan Then ' Склонение мужского имени Select Case Right(strName2, 1) Case "й", "ь" dhDative = dhDative & Mid(strName2, 1, _ Len(strName2) - 1) & "ю" Case Else dhDative = dhDative & strName2 & "у" End Select Else ' Склонение женского имени Select Case Right(strName2, 1) Case "а", "я" If Mid(strName2, Len(strName2) - 1, 1) = "и" Then dhDative = dhDative & Mid(strName2, 1, _ Len(strName2) - 1) & "и" Else dhDative = dhDative & Mid(strName2, 1, _ Len(strName2) - 1) & "е" End If Case "ь" dhDative = dhDative & Mid(strName2, 1, _ Len(strName2) - 1) & "и" Case Else dhDative = dhDative & strName2 End Select End If dhDative = dhDative & " " End If ' Склонение отчества в дательный падеж If Len(strName3) > 0 Then If fMan Then dhDative = dhDative & strName3 & "у" Else dhDative = dhDative & Mid(strName3, 1, Len(strName3) - 1) & "е" End If End If End Function
Function dhGetName(strString As String, intNum As Integer) ' Функция возвращает слово с номером intNum во входной строке _ strString Dim strTemp As String Dim intWord As Integer Dim intSpace As Integer
' Удаление пробелов по краям строки strTemp = Trim(strString) ' Просмотр строки (до слова с нужным номером) For intWord = 1 To intNum - 1 ' Поиск следующего пробела intSpace = InStr(strTemp, " ") If intSpace = 0 Then ' Строка закончилась intSpace = Len(strTemp) End If ' Строка strTemp теперь начинается со слова с номером intWord strTemp = Trim(Right(strTemp, Len(strTemp) - intSpace)) Next intWord
' Выделение нужного слова (по пробелу после него) intSpace = InStr(strTemp, " ") If intSpace = 0 Then intSpace = Len(strTemp) End If dhGetName = Trim(Left(strTemp, intSpace)) End Function
Дата добавления: 2015-06-25; Просмотров: 655; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |