Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск нужного поля. / 11 сообщений из 11, страница 1 из 1
10.10.2007, 13:55:14
    #34860181
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Добрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub Макрос3()
'поиск поля с текстом
NigYach =  10 
'поиск поля с текстом "Цех1". Начинаем с десятой строчки-идем
'к первой, пока не встретим
Do Until NigYach =  1 
    If (iFind = Rows(NigYach).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)) = True Then
    idUGE = iFind.Column
    MsgBox idUGE
    Exit Do
    End If
    NigYach = NigYach -  1 
    Loop
End Sub
Ругается на
Код: plaintext
 If (iFind = Rows(NigYach).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)) = True Then
В чем ошибка?
Спасибо.
...
Рейтинг: 0 / 0
10.10.2007, 14:46:21
    #34860443
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Find возвращает объект типа Range , а вы проверяете на TRUE

может вы имели ввиду
Код: plaintext
(iFind = Rows(NigYach).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)) Is not Nothing
?


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
10.10.2007, 15:15:17
    #34860569
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
HandKot
может вы имели ввиду
Код: plaintext
(iFind = Rows(NigYach).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)) Is not Nothing


Выдает "Инвалид объект" и выделяет
Код: plaintext
Nothing
Где искать ошибку?
Спасибо.
...
Рейтинг: 0 / 0
10.10.2007, 15:28:11
    #34860628
Chelovek Tapok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Sub Макрос3()
'поиск поля с текстом
NigYach = 10
'поиск поля с текстом "Цех1". Начинаем с десятой строчки-идем
'к первой, пока не встретим
Do Until NigYach = 1
Set IFind = Range(Cells(NigYach, 1), Cells(NigYach, Columns.Count)).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)
If Not IFind Is Nothing Then
idUGE = IFind.Column
MsgBox idUGE
Exit Do
End If
NigYach = NigYach - 1
Loop

End Sub
...
Рейтинг: 0 / 0
10.10.2007, 16:51:26
    #34860980
LeonM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Код: plaintext
1.
2.
3.
4.
Function LastCellFind(ws As Worksheet, col As Integer, srow As Integer, erow As Integer, what As String) As Range
    Dim s As String
    s = ws.Cells(srow, col).Address(False, False) & ":" & ws.Cells(erow, col).AddressLocal(False, False)
    Set LastCellFind = Range(s).Find(what, ws.Cells(erow, col), xlFormulas, xlPart, xlByRows, xlPrevious, False, False)
End Function
...
Рейтинг: 0 / 0
10.10.2007, 23:12:13
    #34861694
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
А чем вариант
Код: plaintext
Set IFind=ROWS(NigYach).Find(What:="Цех1",   LookIn:=xlFormulas, LookAt:=xlPart)

хуже

Chelovek TapokSet IFind = Range(Cells(NigYach, 1), Cells(NigYach, Columns.Count)).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)
Если не трудно, поясните.
Спасибо.
...
Рейтинг: 0 / 0
10.10.2007, 23:25:12
    #34861707
Chelovek Tapok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
vad-anatolij
А чем вариант
Set IFind=ROWS(NigYach).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)
хуже
Set IFind = Range(Cells(NigYach, 1), Cells(NigYach, Columns.Count)).Find(What:="Цех1", LookIn:=xlFormulas, LookAt:=xlPart)

Этот вариант не хуже, а даже лучше (КОРОЧЕ И ЛЕГЧЕ В ВОСПРИЯТИИ).
...
Рейтинг: 0 / 0
11.10.2007, 16:50:20
    #34863912
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Добрый день.
В итоге сделал код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
   Sub PoiskPolya()
   ' выделим желтым все строки в которых нет "цех1"  
   NigYach =  1603   
   NigYach1 = NigYach
   NigYach2 = NigYach
   ' поиск поля с текстом "цех1", начинаем с самой нижней строки и идем пока не найдем
   Do Until NigYach1 =  1 
      Set iFind = Rows(NigYach1).Find(What:="цех1", LookIn:=xlFormulas, LookAt:=xlWhole)
      If Not iFind Is Nothing Then
      '  определяем номер столбца в котором находится "цех1"
         idUGE = iFind.Column
         KolvoCEX1 = Application.CountIf(Columns(idUGE), "цех1")
         KolvoCEX2= Application.CountIf(Columns(idUGE), "цех2")
         KolvoCEX3= Application.CountIf(Columns(idUGE), "цех3")
   '  определяем тот ли столбец (в нем должны быть так же "цех1" или "цех2")
            If KolvoCEX1 >  1  Or KolvoCEX2 >  0  Or KolvoCEX3 >  0  Then
            Exit Do
            End If
      End If
      NigYach1 = NigYach1 -  1 
   Loop
   If NigYach1 <=  1  Then
   MsgBox "Цех1 не найден"
   Exit Sub
   End If
   ' помечаем желтым все строки где нет "Цех1"
    Do Until NigYach2 =  1 
      If Cells(NigYach2, idUGE).Value <> "цех1" Then
         Rows(NigYach2).Interior.ColorIndex =  6 
      End If
      NigYach2 = NigYach2 -  1 
   Loop
   End Sub
Отдельно работает,
но когда вешаю его на кнопку формы, вставляя при этом внутрь кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
 Public VudUGE As Range, NigYach As Long
Dim iFind As Range
Private Sub CommandButton1_Click()
UserForm2.Hide
Selection.Copy
    Sheets("Лист1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
' Запоминаем выделенный диапазон на Листе1
Set VudUGE = Selection
' Определяем нижнюю заполненную ячейку
NigYach = VudUGE.Rows.Count
    ActiveWindow.Zoom =  75 
    ' выделим желтым все строки в которых нет "цех1"  
   NigYach1 = NigYach
   NigYach2 = NigYach
   ' поиск поля с текстом "цех1", начинаем с самой нижней строки и идем пока не найдем
   Do Until NigYach1 =  1 
      Set iFind = Rows(NigYach1).Find(What:="цех1", LookIn:=xlFormulas, LookAt:=xlWhole)
      If Not iFind Is Nothing Then
      '  определяем номер столбца в котором находится "цех1"
         idUGE = iFind.Column
         KolvoCEX1 = Application.CountIf(Columns(idUGE), "цех1")
         KolvoCEX2= Application.CountIf(Columns(idUGE), "цех2")
         KolvoCEX3= Application.CountIf(Columns(idUGE), "цех3")
   '  определяем тот ли столбец (в нем должны быть так же "цех1" или "цех2")
            If KolvoCEX1 >  1  Or KolvoCEX2 >  0  Or KolvoCEX3 >  0  Then
            Exit Do
            End If
      End If
      NigYach1 = NigYach1 -  1 
   Loop
   If NigYach1 <=  1  Then
   MsgBox "Цех1 не найден"
   Exit Sub
   End If
   ' помечаем желтым все строки где нет "Цех1"
    Do Until NigYach2 =  1 
      If Cells(NigYach2, idUGE).Value <> "цех1" Then
         Rows(NigYach2).Interior.ColorIndex =  6 
      End If
      NigYach2 = NigYach2 -  1 
   Loop
    Load UserForm1
    UserForm1.Show
'MsgBox ActiveWindow.RangeSelection.Address
End Sub 
то выдает ошибку
Код: plaintext
Object variable or With block variable not set (Error  91 )
и ругается на строку
Код: plaintext
1.
Set iFind = Rows(NigYach1).Find(What:="цех1", LookIn:=xlFormulas, LookAt:=xlWhole)
Где здесь в Set ошибка?
Спасибо.
...
Рейтинг: 0 / 0
11.10.2007, 18:35:58
    #34864240
Pavel55
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Значит неправильно копитуете текст кода. Скорее всего забываете какой-то End If скопировать.
Я создал форму с кнопкой. Вставил ваш код и всё прекрасно заработало.

P.S. Если ваша форма называется UserForm2, то лучше писать не UserForm2.Hide, а Me.Hide (т.е. родительскую форму кнопки спрятать). Тогда случайно не возникнет ошибки, если вы случайно переименуете форму.
...
Рейтинг: 0 / 0
11.10.2007, 19:43:28
    #34864351
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
Pavel55Я создал форму с кнопкой. Вставил ваш код и всё прекрасно заработало.


Не работающий у меня код, я скопировал сюда....(нижний)...может ли он неработать из за:
1) Того что в верхнем коде я использую переменную как константу - 1603, а в нижнем у меня переменная получается из другой переменной.
2) На компьютере открыты несколько книг?
Спасибо.
...
Рейтинг: 0 / 0
12.10.2007, 14:51:19
    #34865318
vad-anatolij
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск нужного поля.
3) у меня в нижнем коде дважды ставиться set.
Нет ли противоречия между Set VudUGE и Set iFind ? Мне просто элементарно не хватает знаний. В чем еще может ошибка? Как ее попытаться вычислить?
Спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск нужного поля. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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