Показать полную графическую версию : [решено] Excel vba не стартует код поиска между книгами
vetold74
10-08-2022, 16:34
Есть две книги..
в файле "Приказ" две подсвеченые ячейки с них забираются данные.
в файле "БАЗА" в столбе С проводится поиск номера и если он есть проводится смещение в право от активной ячейки на 17 ячеек и вставляються данные.
мой макрос не работает,,,, Дайте пожалуйста подсказку почему ?
макрос;
Sub KOD()
Dim myPhrase As Range, myCell As Range, vstavkaKod As Range, poiskcell As Range, Obmen As Range
myPhrase = Worksheets("Приказ").Range("B18")
vstavkaKod = Worksheets("Приказ").Range("K10")
ActiveWorkbooks.Open Filename:="D:\робота\1\робота\БАЗА_ВП.xlsx"
Worksheets("13_11").Activate
Set poiskcell = Workbooks("БАЗА_ВП").Worksheets("13_11").Range("C1:C")
Set myCell = poiskcell.Find(myPhrase)
If Not myCell Is Nothing Then
MsgBox "Адрес найденной ячейки: " & myCell.Address
Obmen = Range(ActiveCell.Address).Offset(, 17)
Obmen.Value = vstavkaKod.Value
Workbooks("БАЗА_ВП.xlsx").Save
Else
MsgBox "Не найдено"
Workbooks("БАЗА_ВП.xlsx").Close
End If
End Sub
Дайте пожалуйста подсказку почему ? »
Вы неправильно используете свойства и методы объектов. Кроме того, в файлах нет листов с такими названиями, на которые вы ссылаетесь.в файле "Приказ" две подсвеченые ячейки с них забираются данные. »
Нужно их заполнить.
Set poiskcell = Workbooks("БАЗА_ВП") »
Расширение у файла может быть различным, его следует указывать.
Worksheets("Приказ").Range("B18") »
По факту лист называется "Делить", а не "Приказ". Исправьте или в коде, или в файле.
Worksheets("13_11"). »
Такого листа тоже нет.
Насколько я могу судить, код должен быть примерно таким, а файлы должны ему соответствовать:
Sub KOD()
Dim myPhrase As Range, myCell As Range, vstavkaKod As Range, poiskcell As Range, Obmen As Range
Set myPhrase = Worksheets("Приказ").Range("B18")
Set vstavkaKod = Worksheets("Приказ").Range("K10")
Workbooks.Open "D:\робота\1\робота\БАЗА_ВП.xlsx"
Worksheets("13_11").Activate
Set poiskcell = Workbooks("БАЗА_ВП.xlsx").Worksheets("13_11").Range("C1:C30")
Set myCell = poiskcell.Find(myPhrase)
If Not myCell Is Nothing Then
MsgBox "Адрес найденной ячейки: " & myCell.Address
Set Obmen = myCell.Offset(, 17)
Obmen.Value = vstavkaKod.Value
Workbooks("БАЗА_ВП.xlsx").Save
Else
MsgBox "Не найдено"
Workbooks("БАЗА_ВП.xlsx").Close
End If
End Sub
vetold74
10-08-2022, 19:15
Файлы что прикрепил делал по быстрому сам с оригинала.. Поэтому есть неточности такие как "приказ" (название книги) "делить" (название листа в этой книги) - это один файл.
Лист "13_11" это первый лист в книге "БАЗА-ВП" это я прозевал исправить....
Поменял значения как описано выше. Ошибка та же...
Run - time error ' 91 ' : Object variable or With block variable not set
Перевод - Ошибка времени выполнения '91': переменная объекта или переменная блока не установлена
Поменял значения как описано выше. Ошибка та же... »
Это на моем коде, или на вашем? Там различий достаточно много, начиная например с диапазона Range("C1:C") »
или например не бывает такой коллекции / объекта:
ActiveWorkbooks.Open »
Ну и другого там хватает. Мой приложенный код у меня срабатывал, нужно было только привести в порядок названия файлов, листов и диапазонов. Приложите ваши файлы и откорректированный код, который вы запускаете.
vetold74
10-08-2022, 21:32
Поменял значения как описано выше. Ошибка та же... »
Это на моем коде, или на вашем? Там различий достаточно много, начиная например с диапазона Range("C1:C") »
или например не бывает такой коллекции / объекта:
ActiveWorkbooks.Open »
Ну и другого там хватает. Мой приложенный код у меня срабатывал, нужно было только привести в порядок названия файлов, листов и диапазонов. Приложите ваши файлы и откорректированный код, который вы запускаете.
Мне нужно фильтровать весь столбик(с1:с). Значений в нем много, до 100000 может доходить.
Суть макроса что я ищу значение ячейки В18 (книга "приказ" лист "делить" в книге "база" лист "13_11". Если значение в базе есть я смещаюсь на 17 ячеек, от активной ячейки (то значение что я нашел) и вставляю значение "К10"( с книги "приказ" лист "делить") в эту ячейку. Сохраняю результат и закрываю книгу.
Мне нужно фильтровать весь столбик(с1:с) »
Попробуйте просуммировать диапазон c1:c с помощью функции сумм(c1:c) - эксель не может ее вычислить (и представить этот диапазон тяжело). Тогда пишите "C:C", а лучше - Set poiskcell = Workbooks("БАЗА_ВП.xlsx").Worksheets("13_11").Range("C1").Resize(Workbooks("БАЗА_ВП.xlsx").Worksheets("13_11").Range("C1").End(xlDown).Row, 1)
Сохраняю результат и закрываю книгу. »
В коде пока логика другая: или сохраняю результат, или закрываю книгу.
vetold74, на самом деле не очень понятно, зачем вам VBA, поставленные задачи легко решаются стандартными средствами экселя. Вы регистрируете движение неких материалов по точкам, или в чем смысл этого кода?
vetold74
10-08-2022, 22:09
Мне нужно фильтровать весь столбик(с1:с) »
Попробуйте просуммировать диапазон c1:c с помощью функции сумм(c1:c) - эксель не может ее вычислить (и представить этот диапазон тяжело). Тогда пишите "C:C", а лучше - Set poiskcell = Workbooks("БАЗА_ВП.xlsx").Worksheets("13_11").Range("C1").Resize(Workbooks("БАЗА_ВП.xlsx").Worksheets("13_11").Range("C1").End(xlDown).Row, 1)
Сохраняю результат и закрываю книгу. »
В коде пока логика другая: или сохраняю результат, или закрываю книгу.
vetold74, на самом деле не очень понятно, зачем вам VBA, поставленные задачи легко решаются стандартными средствами экселя. Вы регистрируете движение неких материалов по точкам, или в чем смысл этого кода?
Поиск данных я могу прописать функцией ВПР, а дальше вставка данных с ячейки со смещением активной ячейки.. ..а так есть возможность привязать все на кнопку и запускать макрос по надобности.
В коде сначало стоит сохранение вставки (если я ее нашел), если нет то закрытие книги. Я что то напутал?
vetold74
11-08-2022, 09:02
Добрый день. Ошибку нашел.... Это оказался формат (ссылка) обьекта поиска ячейки В18 и К10.
Большое спасибо за помощь.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.