将多个无序的单元格区域复制到另一个工作簿时,macros代码无法工作

我想从一个工作簿(文件1)复制一些无序的行到另一个工作簿(文件2)。 这里是我已经写的代码,代码是在文件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),这个代码工作。 问题是当我复制一个无序的范围(例如:E20:$ J21,E23:J24),这段代码没有解决。 但是,当我用这个代码复制一个无序的范围到相同的工作表,它只是工作。 我仍然无法弄清楚我的错误在哪里。

当您复制到另一个工作表上的直接目标时,会丢失公式并保留单元格格式,因此不需要Range.PasteSpecial方法的xlPasteValuesAndNumberFormats或xlPasteFormats操作。

我build议你将多个.PasteSpecial操作分解成两个操作; 具有不同目的地的Worksheet.Copy方法和具有xlPasteColumnWidths的单个.PasteSpecial

 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枚举以获取Range.PasteSpecial操作的完整列表