Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2010, 20:48   #1
CyberMen
Заблокирован
 
Регистрация: 08.08.2010
Сообщений: 41
По умолчанию Как узнать, есть ли в заданном диапазоне буквы...

Как узнать, есть ли в заданном диапазоне буквы.
Пример моего кода (привожу отрывок из кода):
Код:
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
    For Each oCell In Selection.Tables(1).Range.Cells
            myRange.SetRange Start:=oCell.Range.Start, End:=(oCell.Range.End - 1)
            If IsNumeric(myRange) = True Then
Как узнать, есть ли в диапазоне myRange буквы.
Вообще, смысл кода в чём? В том, чтобы просмотреть ячейки всех таблиц в документе (я как всегда косячу - в данном случае приведён пример для одной таблицы), и если там есть только цифры, то сделать определённое действие. На др. форумах я нашёл решение этой проблемы, но вчера столкнулся с цифрами, разделёнными точками и запятыми, и эти цифры уже не считаются за цифры.

Последний раз редактировалось CyberMen; 10.08.2010 в 20:58.
CyberMen вне форума Ответить с цитированием
Старый 10.08.2010, 21:15   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Нужно действовать поиском с помощью подстановочных знаков.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 10.08.2010, 21:18   #3
CyberMen
Заблокирован
 
Регистрация: 08.08.2010
Сообщений: 41
По умолчанию

viter.alex
а типа функции instr - нет ничего поменьше, да по-проще?
Это получается ты предлагаешь:
Код:
with myRange.Find
и поехало
?
А вот как-то ещё функции можно делать (есть процедуры, а есть функции) - в них не будет быстрее? Т.е. я в функцию помещаю myRange. Функция определяет, есть ли там буквы, и возвращает (раздражает это слово) True или False.
Я просто функции ещё ни разу не делал.

Последний раз редактировалось CyberMen; 10.08.2010 в 21:29.
CyberMen вне форума Ответить с цитированием
Старый 10.08.2010, 23:36   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Нет, я предлагаю искать сразу по всей таблице.
Код:
Sub test()
  Dim oRng As Range
  With Selection.Tables(1).Range.Find
    .Text = "<[0-9]@[.,][0-9]@>"
    .MatchWildcards = True
    .Replacement.Font.Color = wdColorRed
    .Execute Replace:=wdReplaceAll
  End With
End Sub
Найдёт в таблице все числа, разделённые точкой или запятой, занимающие всю ячейку, и окрасит их в красный цвет
Хотя можно и перебором, только лучше использовать Do…Loop, а не For Each, для увеличения быстродействия
Код:
Sub test2()
  Dim oCell As Cell
  Dim sCellText As String
  Set oCell = Selection.Tables(1).Range.Cells(1)
  Do Until oCell Is Nothing
    sCellText = Left(oCell.Range.Text, Len(oCell.Range.Text) - 2)
    'Проверяем является ли числом текст в ячейке сам по себе _
    или если в нём точку заменить на запятую
    If IsNumeric(sCellText) Or IsNumeric(Replace(sCellText, ".", ",")) Then
    
    End If
    'Переход в следующую ячейку
    Set oCell = oCell.Next
  Loop
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.08.2010, 08:06   #5
CyberMen
Заблокирован
 
Регистрация: 08.08.2010
Сообщений: 41
По умолчанию

Вот такое решение нашёл благодаря Replace. Сам бы наверное если и догадался об этом, то очень ‎не скоро:‎
Код:
If IsNumeric(myRange) = True Or IsNumeric(Replace(myRange, ",", "")) = True Or ‎IsNumeric(Replace(myRange, ".", "")) = True Then
В документе 192 таблицы – проверка была проведена за 2 минуты. Хорошая работа.‎

viter.alex
Не понятно только, зачем точку менять на запятую.‎
CyberMen вне форума Ответить с цитированием
Старый 14.08.2010, 13:26   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от CyberMen Посмотреть сообщение
viter.alex
Не понятно только, зачем точку менять на запятую.‎
Затем, что работа функции IsNumeric зависит от принятого в системе десятичного разделителя (задаётся в панели управления). По умолчанию, в русской операционной системе используется запятая, поэтому число вида "25.3" не будет признано числом.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 14.08.2010, 13:29   #7
CyberMen
Заблокирован
 
Регистрация: 08.08.2010
Сообщений: 41
По умолчанию

viter.alex
да, я уже в курсе, мне на др. форуме объяснили. Просто в моём случае встречались 2 и 3 точки (запятые) в одном числе и это уже не воспринималось, как число.
Вот сейчас думаю, а если по ошибке в цифре будут и точки и запятые, что тогда делать?
CyberMen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли способ узнать, кто вызвал скрипт? motorway PHP 5 08.07.2009 09:16
Как проверить активность IP в заданом диапазоне SeRhy Работа с сетью в Delphi 2 17.03.2009 23:59
как найти первую заполненную ячейку в диапазоне Bezdar Microsoft Office Excel 3 19.02.2009 11:59
Есть список доменных машин. Узнать кто залогинен. luckyfuck Общие вопросы Delphi 2 05.11.2008 15:12
как найти данные в диапазоне Tanya2007 Microsoft Office Excel 2 20.11.2007 19:33