Я пытаюсь перебрать код, который копирует автофильтрованный диапазон из одной книги и вставить его в другую. я - PullRequest
0 голосов
/ 25 октября 2019

У меня есть цикл, который берет динамический диапазон в рабочей книге A и вставляет его в рабочую книгу B, ячейка D4. Затем он повторяется и вставляет другой динамический диапазон в рабочую книгу C, ячейку D4. Но эти два диапазона могут быть разных размеров.
Я получаю "Метод PasteSpecial класса Range не удалось"

Я попробовал все три метода копирования / вставки, которые здесь показаны https://www.excelcampus.com/vba/copy-paste-cells-vba-macros/ Первые два примеране копирует, а последний копирует, но выдает мне вышеуказанную ошибку PasteSpecial.

Sub CopyPaste()
  Dim AX As Workbook
  Dim WB As Workbook
  Dim rng As Range
  Dim autofiltrng As Range
  Dim xlApp As Excel.Application

  Set xlApp = CreateObject("Excel.Application")
  Set AX = Workbooks.Open("C:\Desktop\AXFile.xlsx")
  Set WB = Workbooks.Open("C:\Desktop\ClientA.xlsx")

  'filtering AX file to show 1 specific client
  With Axys
    AX.Sheets(1).Range("A2").AutoFilter Field:=4, Criteria1:="ClientA"
  End With

  With ActiveSheet.AutoFilter.Range
    On Error Resume Next                        
  Set autofiltrng = .Offset(1, 0).Resize(.Rows.Count - 1,_ 
    1).SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
  End With

  Set rng = AX.Sheets(1).AutoFilter.Range
  'copy/paste data for specific client in their own XLS
  rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy
  WB.Sheets(1).Range("a14").PasteSpecial xlPasteValues
  Application.CutCopyMode = False

WB.Save
WB.Close
AX.Close

End Sub

Я вынул цикл из вышеприведенного кода, но каждый раз, когда я перебираю 50+ клиентов, чтобы создать 50+EXCEL файлы Я получаю ошибку PasteSpecial в какой-то случайной точке процесса. Никогда в одном месте.

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Предложите вам захватить информацию, которая вам интересна, а не использовать фильтр и копировать / вставить. Затем загрузите эту информацию непосредственно в цель.

Нет необходимости создавать xlApp, который вы никогда не используете, а затем никогда не утилизируете (Set xlApp = Nothing).

0 голосов
/ 25 октября 2019

Вычитание '5' строк из отфильтрованного диапазона (т. Е. Эта строка: rng.Offset(1, 5).Resize(rng.Rows.Count - 5).Copy выглядит как потенциальная ошибка. Если вы хотите просто удалить заголовок поля из диапазона, измените это значение на 5 на 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...