Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
1

Find и Select

08.06.2017, 11:33. Просмотров 860. Ответов 40
Метки нет (Все метки)

Добрый день! Помогите, пожалуйста.
Когда-то использовала такую конструкцию
Visual Basic
1
Range("...").Find("...").Select
А сейчас почему-то не получается.
Visual Basic
1
2
Set C1 = Sheets.Item(1).Range("A1:A100")
Set C2 = C1.Find("№")
По идее в переменной C2 должен быть диапазон ячейки, содержащей №. А там значение ячейки, содержащей №. Поэтому к C2 не получается применить Select. Как выделить ячейку, содержащую № или как сразу получить ее строку и столбец?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2017, 11:33
Ответы с готовыми решениями:

Как оформить условие на попадание в диапазон в конструкции Select Case ... End Select?
Народ, подскажите please, правильна ли конструкция следующего кода: Sub...

Ошибка в пользовательской форме "End Select without select case"
У меня был написан код, который хорошо работал.Я решил добавить...

Select Without Select Case
Помогите кто-нибудь, пожалуйста! Написала такой вот код, но мне выдает...

Find Find
Здравствуйте, имею код: With ActiveDocument.Range.Find 'ищем текст ...

Find в VBA
Помогите с помощью Find найти в каком из столбцов находиться число 4,начиная с...

40
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 14:23 2
Нет, если set - то не может быть в переменной значение, в переменной будет объект.
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
08.06.2017, 14:28  [ТС] 3
Ну вот если смотреть в Watches. Expression C2, Value "NN п.п", Type Variant/Object/Range
0
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 15:10 4
Цитата Сообщение от Simply me Посмотреть сообщение
Type Variant/Object/Range
!!!
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
08.06.2017, 15:16  [ТС] 5
А как выделить эту ячейку? C2.Select не работает, Range(C2.Address).Select тоже. Выделить нужно, чтобы получить ActiveCell.Row и ActiveCell.Column. Может, по-другому можно?
0
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 15:56 6
Если там Value "NN п.п", то там никак не могло найтись "№", что-то Вы путаете.
А выделять (если нашло) должно, если правда лист активный и не защищён. Если конечно вообще нужно выделать, что ооочень редко на самом деле нужно...
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
08.06.2017, 16:48  [ТС] 7
Цитата Сообщение от Hugo121 Посмотреть сообщение
Если там Value "NN п.п", то там никак не могло найтись "№", что-то Вы путаете.
Hugo121, просто сюда сообщения с телефона набирала, не нашла "№". Такое значение "№№ п.п"
Мне необязательно выделять. Мне нужно получить строку и столбец этой ячейки.
0
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 17:09 8
строка=C2.row
столбец=C2.column
1
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
08.06.2017, 17:17  [ТС] 9
Так просто? Спасибо, попробую. Вроде что-то не получалось...
0
pashulka
2404 / 1226 / 499
Регистрация: 01.12.2010
Сообщений: 2,478
08.06.2017, 17:47 10
Simply me, Метод Select можно применить (разумеется, если это действительно нужно) при соблюдении нескольких условий, во-первых, искомый текст должен наличествовать в ячейках указанного диапазона (это понятно), а во-вторых, активным должен быть именно тот лист, где мы ищем текст. Учесть первое и обойти второе ограничение (без лишних строк, как то отдельное выделение раб.листа), можно, например, так :

Visual Basic
1
2
3
4
5
6
7
8
Dim c As Range
Set c = Worksheets(1).Range("A1:A100").Find("№", , xlValues, xlPart)
 
If Not c Is Nothing Then
   Application.Goto c
Else
   MsgBox "Искомое значение не найдено", vbCritical, ""
End If
1
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 17:48 11
Visual Basic
1
Sheets.Item(1).Range()
- вот тут тоже непонятно что за объект Item(1)
0
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
08.06.2017, 17:51  [ТС] 12
pashulka, спасибо.
Цитата Сообщение от Hugo121 Посмотреть сообщение
вот тут тоже непонятно что за объект Item(1)
Hugo121, это будет цикл по листам. Sheets.Item(i)
0
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 17:58 13
Ну тогда нужно вроде
Visual Basic
1
 Sheets(Item(i))
хотя эти мелкомягкие так иногда чудят...
1
pashulka
2404 / 1226 / 499
Регистрация: 01.12.2010
Сообщений: 2,478
08.06.2017, 19:04 14
Hugo121, шутите ? Sheets.Item(1) это тоже самое, что и Sheets(1)

P.S. для перебора всех рабочих листов, можно использовать For Each и Worksheets, т.е.

Visual Basic
1
2
3
4
dim ws as worksheet
for each ws in worksheets
 
next
1
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
08.06.2017, 21:24 15
Да, точно, ошибся.
Но зачем писать так сложно?
0
MU-GK
28 / 25 / 1
Регистрация: 06.01.2017
Сообщений: 282
09.06.2017, 00:45 16
Я вот почему-то не люблю
For Each

делаю так:

Visual Basic
1
2
3
4
ns = Sheets.Count
for s =1 to ns
 ....
next s
1
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
09.06.2017, 08:57  [ТС] 17
А подскажите еще, пожалуйста. Есть какие-то способы найти последнюю непустую ячейку? Но не абсолютно последнюю, а как бы первую непустую относительно другой ячейки.
Нашла способы для нахождения абсолютно последней непустой ячейки.
Visual Basic
1
2
3
last_row = Cells(Rows.Count, 1).End(xlUp).Row
 last_row = Cells.SpecialCells(xlLastCell).Row
 last_row = UsedRange.Row UsedRange.Rows.Count – 1
Для моего случая они возвращают 35, а нужно – 27.
0
Миниатюры
Find и Select  
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
09.06.2017, 10:07 18
Ищите по третьему столбцу:
Visual Basic
1
last_row = Cells(Rows.Count, 3).End(xlUp).Row
Ну или может быть можно использовать [c22].currentregion
1
Simply me
235 / 31 / 6
Регистрация: 05.05.2012
Сообщений: 317
Завершенные тесты: 1
09.06.2017, 13:10  [ТС] 19
Не очень получается. По третьему столбцу не получится, потому что 35 строчка занимает столбцы с B по F, как и вся таблица (я для скрина сократила из соображений конфедициальности).
CurrentRegion я так использую:
Visual Basic
1
2
Set c = Cells(first_row, 2)
last_row=c.CurrentRegion.Row+c.CurrentRegion.Rows.Count-1
И почему-то все время совпадает first_row и last_row.
0
Hugo121
6286 / 2388 / 402
Регистрация: 19.10.2012
Сообщений: 7,061
09.06.2017, 14:08 20
Без примера файла разговор ни о чём...
0
09.06.2017, 14:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2017, 14:08

Find Wrap
свойство Wrap - поворачивать, заворачивать - определяет поведение поиска при...

метод find
Добрый день! Имеются столбцы А и B с данными необходимо написать макрос...

VBA-Excel-Find
Добрый день! Имеем: в ячейке A2 "2016" в ячейке B2 =ТЕКСТ("01.01." &...


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

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

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