Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: КТО ЗНАЕТ! Добавлено: 06.08.10 19:44  

Автор вопроса:  Marlen
Создан поиск и замена букв по клавиш ASCII (vbcode) -
Код:
Sub Replace ()
Dim NUMBER, I
    For I = 1 To 15000
     Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    NUMBER = AscW(Selection.Text)
    If Len(Selection.Text) > 1 Then
    Exit For
    End If
    Select Case NUMBER
Case 1040
     Selection.TypeText Text:="A"
Case 1041
     Selection.TypeText Text:="B"
' и так далее
    End Select
    Next
  Selection.MoveDown Unit:=wdLine, Count:=1
  Selection.HomeKey Unit:=wdLine
End Sub


но есть следующая проблема например нужно заменит несколько букв “аbv” на “абв” или “g`” на “г”
Например
Case 1040+1041
Selection.TypeText Text:="AБ" - но это ошибочно
Ну как быт знатоки!

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 07.08.10 08:56
а если так?
  1. Case 1040&1041

и кстати в конце выбора должен стоять всегда "case else"

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 07.08.10 10:15
Just пишет:
и кстати в конце выбора должен стоять всегда "case else"

Не должен

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 07.08.10 10:18
AscW возвращает только код первого символа, вне зависимости от того сколько символов в строке

Ответить

Номер ответа: 4
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #4 Добавлено: 07.08.10 12:14
Рекомендуется (хотя это не обязательно) иметь оператор Case Else в конструкции Select Case для обработки непредвиденных значений testexpression.

http://msdn.microsoft.com/ru-ru/library/cy37t14y(VS.90).aspx

это я привел в первом что нашел, но я читал msdn на английском, и если память не изменяет, там писалось, что else должен стоять в любом случае

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 07.08.10 14:18
Во-первых это документация по VB.NET 9.0 а не по VBA

Во-вторых, в VB .NET, так же как и в VBA, Case Else не является обязательным. Об этом также говорится в ссылке которую ты дал:

  1. Select [ Case ] testexpression
  2.     [ Case expressionlist
  3.         [ statements ] ]
  4.     [ Case Else
  5.         [ elsestatements ] ]
  6. End Select


В нотации MSDN квадратные скобки означают опциональные части.

Ответить

Номер ответа: 6
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #6 Добавлено: 07.08.10 14:35
я понимаю, что в таких скобках необязательные параметры, но, если будит значение, не указанное заранее получится ошибка, так не проще ли ставить else?

Ответить

Номер ответа: 7
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #7 Добавлено: 07.08.10 22:13
разве если не один вариант не совпадет, не будит ошибки?

Ответить

Номер ответа: 8
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #8
Добавлено: 07.08.10 22:55
не будет. Просто не выполнится ни один из задуманных вариантов действий.

Ответить

Номер ответа: 9
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #9 Добавлено: 08.08.10 20:22
ясно. спасибо обоим что поправили.

Ответить

Номер ответа: 10
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #10 Добавлено: 10.08.10 12:35
Ну а для решения задачи наверное придётся юзать регулярные выражения.

Ответить

Номер ответа: 11
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #11
Добавлено: 17.08.10 08:33
Может просто реплейсменты сделать в порядке убывания длины сочетаний символов?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам