Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
1

Поиск меток

05.03.2013, 14:53. Просмотров 1466. Ответов 27
Метки нет (Все метки)

Идея в том, чтобы найти все строки в которых находится значение qw и скрыть строку где находятся значение.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub trvi()
    Dim Poisk As Range
 
    With Worksheets("Лист1")
        Set Poisk = .Range("A1:Z100").Find(What:="qw", LookIn:=xlValues, _
            LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
        MsgBox Poisk.Row
 
.Rows(Poisk.Row).Hidden = True
 
            If Not Poisk Is Nothing Then
            sa = Poisk.Address
            Do
                Set Poisk = .FindNext(After:=Poisk)
                Loop While Not Poisk Is Nothing And Poisk.Address <> sa
            End If
    End With
End Sub
У меня значений qw несколько. Код ищет только первое значение, а дальше не идёт???

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 14:53
Ответы с готовыми решениями:

Замена меток в документе WORD данными из EXCEL
Доброго времени суток. Возникла необходимость на работе в создании данного...

Как организовать поиск в другой книге или в этой же книге, поиск по слову на определенных листах
Всем привет!) Как организовать поиск в другой книге или в этой же книге, поиск...

Избавление от меток
есть два куска кода полные меток, проблема в том, что не понимаю логики, вот...

Массив меток
Возможен-ли массив меток, аналогичный массиву процедур?

Создание меток
Как возвратить ход вычислений в начало, таким образом чтобы у пользователя был...

27
Аксима
5848 / 1268 / 189
Регистрация: 12.12.2012
Сообщений: 991
07.03.2013, 14:54 21
trvi, отлично, теперь мне все ясно.
У вас на листе генерируется специальное значение ошибки (#REF!) и, как следует из статьи на MSDN, это значение не приводится автоматически к строковому типу. Выходов тут может быть два: либо явное приведение к строковому типу с помощью функции CStr, либо проверка ячейки на содержание специального значения ошибки с помощью функции IsError. В коде ниже демонстрируется второй подход.

Visual Basic
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
Sub ConditionalHide(ByVal rn As Range, ByVal searchFor As String)
   Dim r As Range
   Dim c As Collection
   Dim i As Long, j As Long
   Dim m() As Variant, v As Variant
   Set c = New Collection
   m = rn
   For i = 1 To rn.Rows.Count
      For j = 1 To rn.Columns.Count
         If Not IsError(m(i, j)) Then
            If m(i, j) = searchFor Then
               c.Add i
               Exit For
            End If
         End If
      Next j
   Next i
   If c.Count > 0 Then Set r = rn.Cells(c(1), 1)
   For Each v In c
      Set r = Union(r, rn.Cells(v, 1))
   Next v
   r.EntireRow.Hidden = True
End Sub
 
Sub ConditionalShow(ByVal rn As Range, ByVal searchFor As String)
   Dim r As Range
   Dim c As Collection
   Dim i As Long, j As Long
   Dim m() As Variant, v As Variant
   Set c = New Collection
   m = rn
   For i = 1 To rn.Rows.Count
      For j = 1 To rn.Columns.Count
         If Not IsError(m(i, j)) Then
            If m(i, j) = searchFor Then
               c.Add i
               Exit For
            End If
         End If
      Next j
   Next i
   If c.Count > 0 Then Set r = rn.Cells(c(1), 1)
   For Each v In c
      Set r = Union(r, rn.Cells(v, 1))
   Next v
   r.EntireRow.Hidden = False
End Sub
С уважением,
Aksima
1
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
08.03.2013, 18:39  [ТС] 22
Aksima,

Что-то не получается у меня. Вот код который я использовал:
Visual Basic
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Sub Generate()
    
    Dim ws1 As Worksheet
    Set ws1 = Worksheets("Ëèñò1")
 
    Dim rn As Range
    Set rn = ws1.Range("A1:Z100")
    
Application.ScreenUpdating = False
 
    With ws1
         .Activate
         ' .Visible = xlSheetVisible
                ConditionalHide rn, "hide"
                ConditionalShow rn, "show"
         .PrintPreview
         ' .Visible = xlSheetHidden
    End With
 
 
Application.ScreenUpdating = True
End Sub
 
Sub ConditionalHide(ByVal rn As Range, ByVal searchFor As String)
   Dim r As Range
   Dim c As Collection
   Dim i As Long, j As Long
   Dim m() As Variant, v As Variant
   Set c = New Collection
   m = rn
   For i = 1 To rn.Rows.Count
      For j = 1 To rn.Columns.Count
         If Not IsError(m(i, j)) Then
            If m(i, j) = searchFor Then
               c.Add i
               Exit For
            End If
         End If
      Next j
   Next i
   If c.Count > 0 Then Set r = rn.Cells(c(1), 1)
   For Each v In c
      Set r = Union(r, rn.Cells(v, 1))
   Next v
   r.EntireRow.Hidden = True
End Sub
 
Sub ConditionalShow(ByVal rn As Range, ByVal searchFor As String)
   Dim r As Range
   Dim c As Collection
   Dim i As Long, j As Long
   Dim m() As Variant, v As Variant
   Set c = New Collection
   m = rn
   For i = 1 To rn.Rows.Count
      For j = 1 To rn.Columns.Count
         If Not IsError(m(i, j)) Then
            If m(i, j) = searchFor Then
               c.Add i
               Exit For
            End If
         End If
      Next j
   Next i
   If c.Count > 0 Then Set r = rn.Cells(c(1), 1)
   For Each v In c
      Set r = Union(r, rn.Cells(v, 1))
   Next v
   r.EntireRow.Hidden = False
End Sub
Даёт ошибку в строке: object variable or with block variable not set
Visual Basic
1
r.EntireRow.Hidden = False
Можешь вышлешь мне в личку на фаил с корректным кодом???

Спасибо большое за отклик!!!
0
Hugo121
6306 / 2401 / 410
Регистрация: 19.10.2012
Сообщений: 7,119
08.03.2013, 19:04 23
Я бы добавил в функцию ещё один параметр - "truefalse". Ну и соответственно код урезал на половину. Или там ещё есть разница между функциями, которую я не вижу?
0
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
09.03.2013, 08:35  [ТС] 24
Hugo121,

Можешь пример показать?
0
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
09.03.2013, 10:34  [ТС] 25
Aksima,

Вроде работает... пока тестирую.

Но если уйти за диапазон, то будет ошибка.
0
Миниатюры
Поиск меток   Поиск меток  
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
09.03.2013, 10:35  [ТС] 26
Aksima,

Visual Basic
1
Выходов тут может быть два: либо явное приведение к строковому типу с помощью функции CStr, либо проверка ячейки на содержание специального значения ошибки с помощью функции IsError. В коде ниже демонстрируется второй подход.
Почему именно по второму подходу или по первому?
Скажите, а упростить код можно? Тут Hugo121 говорит, что можно упростить...
0
Step_UA
1418 / 552 / 191
Регистрация: 09.06.2011
Сообщений: 1,180
09.03.2013, 12:44 27
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Generate()
    Dim rn As Range
 
    With Worksheets("Ëèñò1")
        .Activate
        Set rn = .Range("A1:Z100")
         ' .Visible = xlSheetVisible
                Conditional rn, "hide", True
                Conditional rn, "show", False
         '.PrintPreview
         ' .Visible = xlSheetHidden
    End With
End Sub
 
Sub Conditional(ByVal rn As Range, ByVal searchFor As String, ByVal Hidden As Boolean)
   Dim r As Range, Cell As Range
   Dim i As Long, j As Long
   For Each Cell In rn
        If CStr(Cell.Value) = searchFor Then
            If r Is Nothing Then Set r = rn.Cells(Cell.Row, 1) Else Set r = Union(r, rn.Cells(Cell.Row, 1))
         End If
   Next
   If Not r Is Nothing Then r.EntireRow.Hidden = Hidden
End Sub
1
trvi
26 / 1 / 0
Регистрация: 20.02.2013
Сообщений: 126
09.03.2013, 14:21  [ТС] 28
Step_UA,

Спасибо большое!!! Отличный вариант!

Добавлено через 1 минуту
Aksima,

Огромнейшее СПАСИБО!!! Дай Бог тебе здравия!!! Очень помогли...
0
09.03.2013, 14:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 14:21

оператор меток
Тут программа которую мне делать помогали, она не совсем правильная. Надо чтобы...

Размеры меток
Доброго времени суток! Помогите пожалуйста! Есть прога парсинг центробанка. В...

Избавиться от меток goto
Помогите пожалуйста кто-нибудь избавиться от меток goto.. program Project1;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru