Фильтровать, копировать и вставлять специальные в новый лист Excel

Я хочу использовать VBS на всех листах документа Excel, который будет выполнять следующие действия:

  1. Отфильтровать таблицу
  2. Копировать отфильтрованный контент
  3. Создать новый рабочий лист
  4. Вставить только специальные значения и сохранить как CSV-файл

Я пытаюсь добиться этого с помощью этого кода, но он не работает

With excelObject1
    .Application.DisplayAlerts = False

    for each x in excelObject1.WorkSheets

        x.Rows(1).AutoFilter 1, "type 1"
        x.Range("A1:E41").Copy
        .WorkSheets.Add
        .ActiveWorksheet.Range("A1").PasteSpecial -4122
        .ActiveWorkbook.SaveAs home_directory+x.Name + ".csv", 23

    Next 

    .Quit
    .Application.DisplayAlerts = True
End With

Это выдает ошибку (объект не поддерживает это свойство или метод: «ActiveWorksheet»), и если я удалю точку перед ActiveWorksheet, то выдает ошибку (переменная не определена «ActiveWorksheet») Я не знаю, как создать новый рабочий лист в «для каждого х». Может, я не так делаю? Я пытаюсь сделать это с помощью VBS, но было бы здорово, если бы кто-нибудь помог мне сделать это даже с помощью VBA. У меня Excel 2013 года.


person vladiz    schedule 02.07.2014    source источник


Ответы (1)


Объекты Worksheet не имеют свойство ActiveWorksheet, но объект Application имеет свойство ActiveSheet. То же самое касается свойства ActiveWorkbook. Я также настоятельно рекомендую использовать & вместо + для конкатенации строк.

Измените это:

.ActiveWorksheet.Range("A1").PasteSpecial -4122
.ActiveWorkbook.SaveAs home_directory+x.Name + ".csv", 23

либо в это:

excelObject1.ActiveSheet.Range("A1").PasteSpecial -4122
excelObject1.ActiveWorkbook.SaveAs home_directory & x.Name & ".csv", 23

или это:

.Application.ActiveSheet.Range("A1").PasteSpecial -4122
.Application.ActiveWorkbook.SaveAs home_directory & x.Name & ".csv", 23
person Ansgar Wiechers    schedule 02.07.2014
comment
Это было действительно полезно - person vladiz; 18.07.2014