Страницы: 1
RSS
Не выполняется макрос в файле, открытом в скрытом режиме
 
Добрый день!
Друзья, помоги пожалуйста, не совсем понимаю допущенную мной ошибку...дело в том что зада пере до мной стоит в в открытии из основного файла (xlsm) другого файла (xlsx) в скрытом режиме, и далее определенная обработка данных в данном файле. Проблема в том что в скрытом режиме макрос не обрабатывает, но когда делаю книгу видимой все работает...
Код:
Код
Dim Kniga As String 'переменная с наименование пути к файлу для открытия в скрытом режиме
Dim ИЗча As Object ' переменная для файла открываемого в срытом режиме
Dim lRow As Long ' переменная для поиска первой заполненной строки + 1 в определенном столбце в скрытом файле
Dim lRow1 As Long ' переменная для поиска последней заполненной строки в скрытом файле
Dim lRow2 As Long ' переменная для поиска первой заполненной строки в определенном столбце в скрытом файле
Dim В As Object ' переменная для основного файла из которого будет запускаться макрос
Dim strName As String ' переменная для имени основного файла
Dim lngI As Long ' переменная для поиска последней заполненной строки в основном файле
strName = ThisWorkbook.Name
Set В = Workbooks(strName).Worksheets("Шаблон для заливки") ' основной файл
lngI = В.Cells(Rows.Count, 2).End(xlUp).Row ' последняя заполненная строка в основном файле
Kniga = "путь к файлу" ' указание пути для открытия файла в скрытом режиме
GetObject (Kniga) ' открытие файла в скрытом режиме
Set ИЗча = Workbooks("ИЗ.xlsx").Worksheets(1) ' значение для переменной для файла в скрытом режиме
lRow = ИЗча.Cells(1, 12).End(xlDown).Row + 1 ' значение для первой заполненной строки +1 в скрытом файле (у меня это 12)
lRow1 = ИЗча.Cells(Rows.Count, 12).End(xlUp).Row ' значение для последней заполненной строки +1 в скрытом файле (у меня это 564)
ИЗча.Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ' добавление столбца в скрытом файле
lRow2 = ИЗча.Cells(1, 12).End(xlDown).Row ' значение для первой заполненной строки в скрытом файле (у меня это 11)
ИЗча.Range("C" & lRow2).FormulaR1C1 = "Искомое значение" ' придаем имя новому столбцу
ИЗча.Columns("E:E").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ' добавляем еще один столбец
ИЗча.Range("E" & lRow2).FormulaR1C1 = "Результат" ' придаем имя еще одному новому столбцу 
ИЗча.Range(Cells(lRow, 5), Cells(lRow1, 5)).FormulaLocal = _
        "=ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(C" & lRow & ";$D$" & lRow & ":$D$" & lRow1 & ";0));"""";C" & lRow & ")" ' ИМЕННО ЭТОТ МАКРОС НЕ ВЫПОЛНЯЕТСЯ В СКРЫТОМ РЕЖИМЕ (это формула для поиска искомых значений в массиве данных, с возвратом в случае их нахождения)
В.Range("AB2:AB" & lngI).Copy ИЗча.Range(Cells(lRow, 3), Cells(lRow + lngI, 3)) ' копирование данных из основного файла в скрытый для поиска значений (для указанной выше формулы)


Если что не указал прошу простить...
Изменено: Cruze956 - 21.03.2021 13:04:38
 
Добрый день.
1. Для начала оформите код тегами, как положено (форум ведь уже смотрели, есть 6 постов...).
2. В коде нужно всюду явно прописать чьи строки и ячейки (и количество строк!) используете, может тогда и взлетит.
 
Добавил амперсанты...прошу прощения я только учусь возможно код очень нагружен без логичными кодами...
 
Cruze956,  мне кажется , что  Hugo,  имел ввиду конкретно указать к какой книге какому листу идет обращение, во всех строках кода
Изменено: Mershik - 21.03.2021 13:08:15
Не бойтесь совершенства. Вам его не достичь.
 
там где вы пишите Cells - перед этими буковками всегда указывайте имя листа, иначе это будет активный лист - то есть надо писать так ИЗча.Cells(lRow, 5)
То что вы написали ИЗча перед Range() - правильно, но этого мало, так же надо имя листа писать и перед Cells()

Код
ИЗча.Range(ИЗча.Cells(lRow, 5), ИЗча.Cells(lRow1, 5)).FormulaLocal = _
        "=ЕСЛИ(ЕОШИБКА(ПОИСКПОЗ(C" & lRow & ";$D$" & lRow & ":$D$" & lRow1 & ";0));"""";C" & lRow & ")"
 В.Range("AB2:AB" & lngI).Copy ИЗча.Range(ИЗча.Cells(lRow, 3), ИЗча.Cells(lRow + lngI, 3))
Изменено: New - 21.03.2021 13:23:51
 
Цитата
Cruze956 написал:
Добавил амперсанты
про какие амперсанды Вы говорите? О чём Вы вообще?
& - амперсанд.
' - апостроф.
 
Я ещё и про Rows.Count говорил, не особо я верю что когда говорят что открывать будут xlsx что это именно так будет всегда...
 
New, благодарю, в этом и было мое упущение. Огромное спасибо....долго мучался, видимо от усталости потерял бдительность и внимательность...
Юрий М. я видимо не донес корректно мысль, в первой редакции кода я не дописал пару амперсанДов, о чем и пытался донести вторым сообщением...но спасибо за бдительность и оказанное внимание.
Всех еще раз благодарю.
Страницы: 1
Наверх