2015-12-15 1 views
2

В некотором фоне я написал фрагмент кода, который циклически перебирает все книги в каталоге и выполняет функцию, а эта функция также выполняет другую функцию. Обе функции протестированы отлично и работают без проблем, пока я не помещу их в код, который проходит через все книги. я имел этот код изначально и не было никаких проблем с ним:Нужна помощь в исправлении ошибки vba «1004» после редактирования раздела кода

Set tbl = shtOfErrors.UsedRange 
tbl.Offset(2, 0).SpecialCells(2, 23).Select 
Selection.Resize(, 3).Select 

Я пытался избавиться от всех .select я имел в оригинальных функций, потому что он держал erroring, когда он был вызван в качестве части книги петля. Но теперь я получаю сообщение об ошибке 1004 приложения или объекта определяется здесь ошибка в строке 3:

Set tbl = shtOfErrors.UsedRange 
Set selrng = tbl.Offset(2, 0).SpecialCells(2, 23) 
Set seltbl = selrng.Resize(, 3) 
+1

Кажется, что вы подготовили лист для 'tbl', но вы хотите сделать это и для книги. (+1 для отмены выбора 'select'). – findwindow

+2

'Resize' - это действие, выполненное в диапазоне. Действие не может быть назначено переменной. Просто замените 'Set seltbl = selrng.Resize (, 3)' на 'selrng.Resize (, 3)' и он должен работать правильно. (Если мы предполагаем, что остальная часть кода, который не был представлен, также верен) – Demetri

+1

@Demetri, чтобы сделать его простым: 'Resize' просто не возвращает объект/диапазон, например' worksheets.copy', также нет (но 'worksheets .add' будет делать)? –

ответ

0

один вариант будет:

Set tbl = shtOfErrors.UsedRange 
Set tbl = Intersect(tbl, tbl.Offset(2, 0)).Resize(, 3).SpecialCells(2, 23) 

должны делать все, что вы хотите ... (не тестировался)

другой вариант:

Set tbl = shtOfErrors.Range("$2:$2", Rows(Rows.Count).Address).UsedRange.Resize(, 3).SpecialCells(2, 23) 

третий вариант будет:

Set tbl = shtOfErrors.UsedRange.Offset(2, 0).UsedRange.Resize(, 3).SpecialCells(2, 23) 
+0

Первое решение. Благодаря! – Aline

+0

приветствуется :) –

Смежные вопросы