2017-02-02 7 views
0

Я пытаюсь скопировать некоторые отфильтрованные данные с рабочего листа и вставить его в новый файл csv, который я создаю в кодировке. Я получаю сообщение об ошибке «Вставить метод класса диапазона не удалось». есть идеи?VBA: метод вставки класса диапазона не удался

Sub Button1_Click() 
Dim wkb As Excel.Workbook 
Dim wkb2 As Excel.Workbook 
Dim answer As Integer 
Dim crtra1 As String 
Dim crtra2 As String 
Dim path 
UserForm1.Show 
path = ThisWorkbook.path & "\" & fldr & "\BookHierarchy.csv" 
    Set wkb = Application.Workbooks.Open(path) 
    crtra1 = "TOTUS" 
    crtra2 = "US" 
    wkb.Sheets(1).Range("A1").Resize(Rows.Count, Columns.Count).AutoFilter Field:=13, Criteria1:="=*" & crtra1 & "*" 
    wkb.Sheets(1).Range("A1").Resize(Rows.Count, Columns.Count).AutoFilter Field:=14, Criteria1:="=" & crtra2 
    wkb.Sheets(1).Range("A1").Resize(Rows.Count, Columns.Count).Select 

    Selection.Copy 
    Workbooks.Add 
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.path & "\TOTUS_Books_US_Mapped.csv" 
    path = ThisWorkbook.path & "\TOTUS_Books_US_Mapped.csv" 
    Set wkb2 = Application.Workbooks.Open(path) 
    'ActiveWorkbook.Sheets(1).Select 
    'ActiveWorkbook.Sheets(1).Range("A1").Select 
    wkb2.Sheets(1).Range("A1").PasteSpecial 
    Application.CutCopyMode = False 
     wkb.Sheets(1).AutoFilterMode = False 
End Sub 
+0

является любым из ячеек копируются слившиеся клетки? –

+1

Вам также нужно определить, на каком листе вы хотите, чтобы строки «Rows.Count» и «Columns.Count» появлялись. Посмотрите, как вы это сделали с помощью «Range()»? Вам нужно добавить рабочую книгу и рабочий лист в 'Rows.Count' и' Columns.Count'. Наконец, вместо использования 'Selection.Copy' просто выполните' wkb.Sheets (1) .Range («A1»). Resize (Rows.Count, Columns.Count) .Copy'. Кроме того, возможно, добавьте часть 'Copy' * после * сохранения книги, чтобы предотвратить возникновение проблем с буфером обмена. Наконец, вы хотите только значения скопированных данных? – BruceWayne

+0

копия не скопирована – Navid

ответ

0

Я решил проблему с этим кодом:

Sub Button1_Click() 
    Dim wkb As Excel.Workbook 
    Dim wkb2 As Excel.Workbook 
    Dim answer As Integer 
    Dim crtra1 As String 
    Dim crtra2 As String 
    Dim path 
    Dim rw As Integer 
    Dim clm As Integer 
    UserForm1.Show 
    path = ThisWorkbook.path & "\" & fldr & "\BookHierarchy.csv" 
    Set wkb = Application.Workbooks.Open(path) 
    crtra1 = "TOTUS" 
    crtra2 = "US" 
    wkb.Sheets(1).Range("A1").Resize(Rows.Count, Columns.Count).AutoFilter Field:=13, Criteria1:="=*" & crtra1 & "*" 
    wkb.Sheets(1).Range("A1").Resize(Rows.Count, Columns.Count).AutoFilter Field:=14, Criteria1:="=" & crtra2 

    rw = wkb.Sheets(1).UsedRange.Rows.Count 
    clm = wkb.Sheets(1).UsedRange.Columns.Count 

    Workbooks.Add 
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.path & "\TOTUS_Books_US_Mapped.csv" 
    path = ThisWorkbook.path & "\TOTUS_Books_US_Mapped.csv" 
    Set wkb2 = Application.Workbooks.Open(path) 
    wkb.Sheets(1).Range("A1").Resize(rw, clm).Copy 

    wkb2.Sheets(1).Paste 
    Application.CutCopyMode = False 
     wkb.Sheets(1).AutoFilterMode = False 
End Sub 
Смежные вопросы