2016-02-11 2 views
1

Я хочу скопировать некоторые неупорядоченные строки из одной книги (Файл 1) в другую книгу (Файл 2). Вот код, который я уже пишу, FYI код находится в файле 1:Код макроса не работает при копировании нескольких неупорядоченных диапазонов ячеек в другую книгу

Private Sub CommandButton9_Click() 
    Dim CopyRng As Range, PasteRng As Range 
    xTitleId = "For File Internal" 
    Dim wkb2 As Workbook 
    Dim sht2 As Worksheet 

    Set CopyRng = Application.Selection 
    Set CopyRng = Application.InputBox("Ranges to be copied :", xTitleId, CopyRng.Address, Type:=8) 

    Set wkb2 = Workbooks.Open("C:\Users\Downloads\File 2.xlsx") 
    Set sht2 = wkb2.Worksheets(6) 

    sht2.Activate 
    Set PasteRng = Application.InputBox("Paste to (single cell):", xTitleId, Type:=8) 

    CopyRng.Copy 
    PasteRng.Parent.Activate 

    With sht2.Range(PasteRng.Address) 
     .PasteSpecial xlPasteValuesAndNumberFormats 
     .PasteSpecial xlPasteFormats 
     .PasteSpecial xlPasteColumnWidths 
     Application.CutCopyMode = False 
    End With 

End Sub 

Когда я копирую последовательный диапазон (например, = E20: J24), этот код работает. Проблема заключается в том, когда я копирую неупорядоченный диапазон (ex = E20: $ J21, E23: J24), этот код не работает. Но, когда я использую этот код для копирования неупорядоченного диапазона на тот же рабочий лист, он просто сработал. Я до сих пор не могу понять, где моя ошибка.

+0

Я не знаю, если это непосредственно влияет на процесс, но xl2013 имеет различные отношения с внутренними экземплярами приложения Workbook «Windows». Это поможет, если вы сможете уточнить свой номер версии xl. – Jeeped

+0

btw Я использую xl версию 2010 – nn5594

ответ

0

Когда вы копируете прямое место назначения на другом листе, вы теряете формулы и сохраняете форматирование ячейки, поэтому вам не требуются операции xlPasteValuesAndNumberFormats или xlPasteFormats из Range.PasteSpecial method ¹.

Предлагаю вам разбить несколько операций .PasteSpecial на две операции; a Worksheet.Copy method с отличным назначением и одним .PasteSpecial с xlPasteColumnWidths.

Private Sub CommandButton9_Click() 
    Dim copyRng As Range, pasteRng As Range, xTitleId As String 
    Dim wkb2 As Workbook, sht2 As Worksheet 

    xTitleId = "For File Internal" 
    Set copyRng = Application.Selection 
    Set copyRng = Application.InputBox("Ranges to be copied :", xTitleId, copyRng.Address, Type:=8) 

    Set wkb2 = Workbooks.Open("C:\Users\Downloads\File 2.xlsx") 
    Set sht2 = wkb2.Worksheets(6) 

    sht2.Activate 
    Set pasteRng = Application.InputBox("Paste to (single cell):", xTitleId, Type:=8) 

    'copy values and formatting 
    copyRng.Copy Destination:=pasteRng 

    'copy column widths 
    With pasteRng 
     .PasteSpecial xlPasteColumnWidths 
    End With 
End Sub 

Это работает для моей версии xl2010 14.0.7165.500 (32-разрядная версия). У меня были люди, которые противоречат этой практике, заявляя, что копия в другую книгу на самом деле делает приносить формулы, но я не могу воспроизвести это поведение в этой версии.


¹ См XlPasteType Enumeration для полного списка Range.PasteSpecial операций

+0

Спасибо, что это сработало – nn5594