2017-04-24 77 views
0

我有一個程序需要複製同一工作簿和工作表中的選擇列。 當前的代碼導致Excel崩潰,所以我不確定它是否工作。如何複製同一工作表中的列Excel VBA

有沒有更好的方法來將同一工作表中的列複製到同一個工作簿中?

代碼:

Sub Macro1() 

Dim wb1 As Workbook 

'Set it to be the file location, name, and file extension of the Working File 
Set wb1 = Workbooks.Open("Z:\XXX\Working File.xlsx") 

MsgBox "Copying Fields within Working File" 

wb1.Worksheets(1).Columns("G").Copy wb1.Worksheets(1).Columns("H").Value 
wb1.Worksheets(1).Columns("J").Copy wb1.Worksheets(1).Columns("O").Value 
wb1.Worksheets(1).Columns("K").Copy wb1.Worksheets(1).Columns("N").Value 
wb1.Worksheets(1).Columns("M").Copy wb1.Worksheets(1).Columns("P").Value 

wb1.Close SaveChanges:=True 

End Sub 
+0

在結尾處取下'.Value'。你只是想複製到一個範圍,而不是Value。但是,如果你只是需要值而不是格式化/ etc,你可以做'Range([Destination Range])。Value = Range([copy range])。Value',即'wb1.Worksheets(1).Columns 「H」)。Value = wb1.Worksheets(1).Columns(「G」)。Value'。另外,您是否需要使用整個色譜柱? – BruceWayne

+0

嗯,我補充說,因爲客戶想要一個粘貼值的唯一選項,我認爲這是你如何能做到這一點 –

+0

我確實需要整列 –

回答

3

試試這個,它設置了兩個範圍值相等,這將保持數據,但沒有格式。它應該更快。

Sub Macro1() 
Dim wb1 As Workbook 
'Set it to be the file location, name, and file extension of the Working File 
Set wb1 = Workbooks.Open("Z:\XXX\Working File.xlsx") 

MsgBox "Copying Fields within Working File" 

With wb1.Worksheets(1) 
    .Columns("H").Value = .Columns("G").Value 
    .Columns("O").Value = .Columns("J").Value 
    .Columns("N").Value = .Columns("K").Value 
    .Columns("P").Value = .Columns("M").Value 
End With 

wb1.Close SaveChanges:=True 

End Sub 

注意您使用的是整列,所以它可能會中止,或需要較長的時間。如果你願意,你可以直接得到每列的最後一行,並用它來縮短被複制的範圍。

編輯:如上所述,使用更小的範圍可能會更好。這有點更詳細,但你應該能夠遵循它在做什麼:

Sub Macro1() 
Dim wb1 As Workbook 
Dim lastRow As Long 
'Set it to be the file location, name, and file extension of the Working File 
Set wb1 = ActiveWorkbook 

MsgBox "Copying Fields within Working File" 

With wb1.Worksheets(1) 
    lastRow = .Cells(.Rows.Count, "G").End(xlUp).Row 
    .Range("H1:H" & lastRow).Value = .Range("G1:G" & lastRow).Value 

    lastRow = .Cells(.Rows.Count, "J").End(xlUp).Row 
    .Range("O1:O" & lastRow).Value = .Range("J1:J" & lastRow).Value 

    lastRow = .Cells(.Rows.Count, "K").End(xlUp).Row 
    .Range("N1:N" & lastRow).Value = .Range("K1:K" & lastRow).Value 

    lastRow = .Cells(.Rows.Count, "M").End(xlUp).Row 
    .Range("P1:P" & lastRow).Value = .Range("M1:M" & lastRow).Value 
End With 

wb1.Close SaveChanges:=True 

End Sub 
+2

12要去 - 在這裏得到一個「接受的答案」,你就會成功! – YowE3K

+0

謝謝! 這工作,像你說的,它花了一點,但它符合客戶的需求 –

+1

祝賀布魯斯! – YowE3K

相關問題