Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / If then else / 14 сообщений из 14, страница 1 из 1
25.06.2010, 17:28
    #36708845
-O_o-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Привет ВСЕМ!!!
Есть проблема... Вот код.. Я не селен в ВБА Чего ему надобно ???
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub ssss()
Dim x As Integer
x = InputBox("sss", "sdfsfd")

    Range("a1:a10").Select
    
        Selection.find(What:=x, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
           MsgBox (x)
         If x = True Then
         MsgBox ("dsfsds")
       End If
End Sub


Как сделать так, что бы если такого числа нет в диапазоне поиска то вывести msgbox ("нет такого") ...
И как можно оптимизировать код (сократить) ??
...
Рейтинг: 0 / 0
25.06.2010, 17:59
    #36708910
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
разберем Ваш код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub ssss()
Dim x As Integer                 ' объявление переменной - тут все ок
x = InputBox("sss", "sdfsfd")  ' внесение искомой компонеты

    Range("a1:a10").Select    'выделяем диапазон (зачем?, можно искать и в не выделенном диапазоне)
    
        Selection.find(What:=x, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate     ' задали параметры поиска (зачем так много или это рекордер 
                                                         'столько показывает, достаточно задать искомый элемент
           MsgBox (x)                               ' вывести на экран искомый элемент. Это зачем? 
                                                         
         If x = True Then                          ' если искомый элемент = правда? это что за код?
         MsgBox ("dsfsds")                        ' напечатать окно с набором символов, это к чему?
       End If
End Sub

думаю верный код такой
Код: plaintext
1.
2.
Внесение искомой компоненты
Поиск в диапазоне. Если результат найден, то перевести курсор на него
Если не найдено, то вывести сообщение
...
Рейтинг: 0 / 0
25.06.2010, 18:08
    #36708921
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
На SearchFormat:=False у меня ругается (2000), поэтому убрал.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Explicit

Sub ssss()
Dim x As Integer 'а если введём текст? или большое число?
Dim y As Object
x = InputBox("sss", "sdfsfd")
   
 Set y = Range("a1:a10").Find(What:=x, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
           MsgBox (x) ' наверное надо
           
 If y Is Nothing Then 'если не нашли
    MsgBox ("dsfsds")
 End If
End Sub
...
Рейтинг: 0 / 0
25.06.2010, 18:12
    #36708929
-O_o-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Shamanus,
Поиск был написан редактором... Если бы знал как то написал бы короче... Я не знаю какая функция для поиска...
будет такого плана наверное...

Sub ssss()
Dim x As Integer
x = InputBox("sss", "sdfsfd")
задаем диапазон поиска - поиск (Х)....
выделяем Х если нашли
если нет
вывести значение "бла-бла-бла"...
Больше нет предположений )))
...
Рейтинг: 0 / 0
25.06.2010, 18:12
    #36708930
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Хотя конечно Shamanus прав, я просто Ваш код минимально наладил, себе делал бы иначе, но свою задачу я обычно знаю, а Вашу нет :)
...
Рейтинг: 0 / 0
25.06.2010, 18:16
    #36708937
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
-O_o-Shamanus,
Поиск был написан редактором... Если бы знал как то написал бы короче... Я не знаю какая функция для поиска...
будет такого плана наверное...

Sub ssss()
Dim x As Integer
x = InputBox("sss", "sdfsfd")
задаем диапазон поиска - поиск (Х)....
выделяем Х если нашли
если нет
вывести значение "бла-бла-бла"...
Больше нет предположений )))

ну первое что пришло на ум вот

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub ssss()
Dim x As Integer   ' тут HUGO121 прав, подумайте над типом переменной
x = InputBox("sss", "sdfsfd") ' вводим переменную
  

If Range("a1:a10").Find(x, LookIn:=xlValues) Is Nothing Then ' если поиск по значениям (выбирать именно значения xlvalues диапазона
                                                                                   ' не увенчался успехом пишем не нашел 
    MsgBox "Не нашел!"
Else
    Range(Range("a1:a10").Find(x, LookIn:=xlValues).Address).Select  ' иначе выделяем ячейку с адресом результата
 End If
    
    
End Sub
...
Рейтинг: 0 / 0
25.06.2010, 18:19
    #36708945
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
надо добавить

просто если в поиске указать
Код: plaintext
LookIn:=xlFormulas
то если в значении ячейки будет 25, а записано =10+15, то это результат найден не будет. Поэтому все таки думайте под свою задачу
...
Рейтинг: 0 / 0
25.06.2010, 18:21
    #36708949
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Другой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub ssss()
Dim x 'As Integer 'а если введём текст? или большое число?
Dim y As Object
x = InputBox("sss", "sdfsfd")
Set y = Range("a1:a10").Find(x, , xlValues)
     
 If Not y Is Nothing Then 'если нашли
 Cells(y.Row, y.Column).Select
 Else
    MsgBox ("dsfsds")
 End If
End Sub
...
Рейтинг: 0 / 0
25.06.2010, 18:24
    #36708954
-O_o-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Hugo121 и Shamanus
Спасибо Вам большое. Просто не знал как кратко записать поиск.
Я только начал работать с ЕКСЕЛЬ Хочу себе хороший ПОЛЬЗОВАТЕЛЬСКИЙ уровень... Надеюсь запомню...
...
Рейтинг: 0 / 0
25.06.2010, 18:38
    #36708982
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
-O_o-,

незачто. Я учился в свое время совокупностью макрорекордер + object browser.

Selection обладает почти тем же набором методов и свойств, что и Range это в принципе одно и то же. Диапазон и выделенный диапазон. Если макрорекордер сделал find в selection значит сделайте find прямо у Range

А чтобы легко понять структуру работы этого метода, просто в редакторе VBA нажмите F2 - вызов браузера. Наберите Find, и в найденных результатах по строке Range нажмите F1. Там будет пример, который будет значительнее правильнее с точки программирования ООП для данного метода.

Скопируйте попробуйте, разберетесь. В этом плане майкрософт молодцы. А их msdn-у вообще цены нет.
...
Рейтинг: 0 / 0
25.06.2010, 18:43
    #36708994
-O_o-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Shamanus-O_o-,

незачто. Я учился в свое время совокупностью макрорекордер + object browser.

Selection обладает почти тем же набором методов и свойств, что и Range это в принципе одно и то же. Диапазон и выделенный диапазон. Если макрорекордер сделал find в selection значит сделайте find прямо у Range

А чтобы легко понять структуру работы этого метода, просто в редакторе VBA нажмите F2 - вызов браузера. Наберите Find, и в найденных результатах по строке Range нажмите F1. Там будет пример, который будет значительнее правильнее с точки программирования ООП для данного метода.

Скопируйте попробуйте, разберетесь. В этом плане майкрософт молодцы. А их msdn-у вообще цены нет.
Что такое object browser ?
...
Рейтинг: 0 / 0
25.06.2010, 18:46
    #36708999
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
-O_o-Shamanus просто в редакторе VBA нажмите F2 - вызов браузера.
Что такое object browser ?
...
Рейтинг: 0 / 0
18.07.2010, 10:59
    #36746915
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Hi! :)
-O_o-Что такое object browser ?
F2 нажимаешь в VB редакторе... слева показаны все классы (объекты), справа их методы, свойства и события... Например выбираешь класс (объект) range (см. рисунок) и смотришь его методы, например Activate, или свойства, например Address... событий нет :)... зато есть события для worksheet, например change...
...
Рейтинг: 0 / 0
20.07.2010, 04:37
    #36749453
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
If then else
Hugo121Другой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub ssss()
Dim x 'As Integer 'а если введём текст? или большое число?
Dim y As Object
x = InputBox("sss", "sdfsfd")
Set y = Range("a1:a10").Find(x, , xlValues)
     
 If Not y Is Nothing Then 'если нашли
 Cells(y.Row, y.Column).Select
 Else
    MsgBox ("dsfsds")
 End If
End Sub


Код: plaintext
1.
2.
3.
4.
5.
Set y = Range("a1:a10").Find(x, , xlValues)
If y Is Nothing Then
    MsgBox ("dsfsds")
 Else
   y.Select
End If
Попроще будет
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / If then else / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]