Помогите организовать цикл

Программирование на Visual Basic for Applications
Вячеслав
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 22.09.2007 (Сб) 7:41

Помогите организовать цикл

Сообщение Вячеслав » 22.09.2007 (Сб) 7:48

Помогите организовать цикл есть лист с числами
88656
56623
85612
75395
и тд.
Нужно пройти по ячейкам сверху в низ и найти скажем число 56623.
Спасибо.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.09.2007 (Сб) 8:32

Зачем цикл то? Есть метод Find для Range. Ежели таки надо циклом искать, то в каком месте затруднение то? Подробности в виде не получившегося или нефурычащего кода в студию!
Весь мир матрица, а мы в нем потоки байтов!

Вячеслав
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 22.09.2007 (Сб) 7:41

Сообщение Вячеслав » 22.09.2007 (Сб) 13:43

Ок ок.
сочинил такой код
Dim S, A, E, T As Variant
Dim i, X, Y As Integer


Windows("Основные_1c_8m.xlsm").Activate

A = ActiveCell.Value

Windows("Обор_43.xls").Activate

Cells.Find(What:=A, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

S = ActiveCell.Offset(rowoffset:=0, Columnoffset:=3).Value

Windows("Основные_1c_8m.xlsm").Activate

ActiveCell.Offset(rowoffset:=0, Columnoffset:=15).Value = S
Все отлично если есть такая запись, а если нет получаем ошибку.
Подскажите как обработать.

Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46

Сообщение Genyaa » 22.09.2007 (Сб) 14:32

Есть такая конструкция

On Error GoTo метка
или
On Error Resume Next

Почитайте справку по ней и используйте.
Всякое решение плодит новые проблемы.

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 24.09.2007 (Пн) 13:29

Правильная обработка поиска значений на листе

Код: Выделить всё
Sub Test()
Dim FoundRng As Range
Dim SoughtStr As String

    SoughtStr = "Test" 'ищем слово "Test" на листе "Лист1"
    Set FoundRng = Worksheets("Лист1").Cells.Find(What:=SoughtStr)

    If Not FoundRng Is Nothing Then
        MsgBox "Строка """ & SoughtStr & """ найдена в ячейке " & FoundRng.Address
    Else
        MsgBox "Строка """ & SoughtStr & """ не найдена на листе!"
    End If

    Set FoundRng = Nothing

End Sub


Поэтому введите объектную переменную типа Range, например,
Код: Выделить всё
Dim iRange as Range

присваивайте ей значения поиска (только слово .Activate в конце уберите)

Код: Выделить всё
Set iRange = Cells.Find(What:=A, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)


и проверяйте его на Nothing - если переменная равно Nothing - ничего не найдено, если Not is Nothing - найдено! Адрес ячейки будет
Код: Выделить всё
Adr = iRange.Address


P.S. Вы неправильно объявляете переменные

Dim a, b, c As Ingeter - тут только "c" будет Ingeter, а "a" и "b" будут Variant. Поэтому надо

Код: Выделить всё
Dim a As Integer, b As Integer, c As Integer


либо тоже самое, но короче

Код: Выделить всё
Dim a%, b%, c%


% - Integer
& - Long
! - Single
# - Double
@ - Currency
$ - String

P.P.S. Слова rowoffset:= и Columnoffset:= можете не писать, пишите просто

Код: Выделить всё
ActiveCell.Offcet(0,15) = S


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 118

    TopList