2016-10-28 3 views
0

У меня есть VBS скрипт, который копирует существующий лист, и мне нужно, чтобы очистить динамический диапазон ячеек (в зависимости от конкретной книги Excel открыт)Ошибки при ясно переменная диапазона Excel с помощью VBS

Я могу очистить диапазон, когда она закодирована:

Set xl      = CreateObject("Excel.application") 
fso.CopyFile strFileSelect, fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm" 

wshShell.Run """" & fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm""" 

xl.Application.Sheets("Auto").Range("E15:BP142").ClearContents 

но получаю ошибки при попытке

xl.Application.Sheets("Auto").Range(Cells(15, 5), Cells(142, 67)).ClearContents 

на самом деле, я в конечном счете хочу, чтобы очистить диапазон, основанный на UBound двух массивов для диапазона, somethi нг как:

xl.Application.Sheets("Auto").Range("E15", .Cells((UBound(ArrayText)+1), (((UBound(ArrayStepText) + 1) * 2) + 5))).ClearContents 

Я попытался также, используя клетки вместо .cells, пытался

set r = Range("E15", Cells(142,67)) 

и клиринговую г, что не работает.

Я также не могу использовать xlUp или что-то подобное, как есть скрытые и защищенные ячейки после моего диапазона массива

Существует аналогичный вопрос

VBS for excel: Using a script variable in Range selection

, но я не могу использовать восстановление строки, поскольку я не знаю буквы столбца, с которой она заканчивается, и она должна была бы составить справочную таблицу для определения букв столбца из UBound массива, и это число могло бы идти до 128.

S Неужели есть более простой/более эффективный способ?

Благодаря

+0

Вы используете глобальные объекты 'Cells' и' Range'. Получите ссылку на рабочий лист и используйте полностью квалифицированные ссылки. – Comintern

ответ

0

Благодаря Коминтерн:

endRow = UBound(ArrayCriteria) + 14 
endColumn = UBound(ArrayText) + 4 
xl.Range(xl.Application.Sheets("Auto").Cells(15,5),xl.Application.Sheets("Auto").Cells(endRow,endColumn).clearContents 

Укажите в качестве диапазона Excel, а затем указать, что диапазон начинается в excel с полной квалификацией

0

Что-то, как это должно работать (непроверенные):

newPath = fso.GetParentFolderName(strFileSelect) & "\Newversion.xlsm" 
fso.CopyFile strFileSelect, newPath 

Set xl = CreateObject("Excel.application") 
set wb = xl.Workbooks.open(newPath) 
set sht = wb.Sheets("Auto") 

set rng = sht.Range(sht.Range("E15"), _ 
      sht.Cells((UBound(ArrayText)+1), _ 
      (((UBound(ArrayStepText) + 1) * 2) + 5))) 

rng.clearcontents 
+0

Я пробовал нечто подобное, не совсем то же самое. Я далеко от офиса, но попробую как можно скорее. – BertB

+0

Спасибо за то, что используются точные строки: – BertB