在excel VBA中,我有两个表格。我从第二个第二个复制细胞。表的结构是不同的,所以我复制逐个单元格。只有130个单元被复制,但仍需要大约15秒。我如何加快速度?Excel中的VBA代码非常慢(复制130个单元需要15秒)
看来,如果我从VBA编辑器运行宏,它更快,但仍需要至少10秒。如果我从Excel中运行它,那么我可以看到选择和复制单元格。所以它很慢。
我应该尝试在单元之间分配值而不是复制吗?或者VBA只是很慢?
Public Sub PasteValueRowsIntoAccountDateTable()
Dim rowNumberOfTarget As Integer
Dim rowNumberOfSource As Integer
Sheets("Utolsó hó").Select
Dim myTable As Excel.ListObject
Dim myRow As Excel.ListRow
Set myTable = ActiveSheet.ListObjects("Utolsó_hó")
For Each myRow In myTable.ListRows
rowNumberOfSource = myRow.Range.row
Sheets("Számla dátum").Select
rowNumberOfTarget = Range("Számla_dátum[[#Totals],[Előző Id]]").Value2 + 1
Rows(rowNumberOfTarget & ":" & rowNumberOfTarget).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Call PasteValueRowIntoAccountDateTable(rowNumberOfSource, rowNumberOfTarget)
Next myRow
End Sub
Public Sub PasteValueRowIntoAccountDateTable(ByVal rowNumberOfSource As Integer, ByVal rowNumberOfTarget As Integer)
Call FillDownInAccountDateTable("Előző Id", rowNumberOfTarget)
Call FillDownInAccountDateTable("Havi nettó hozam", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Számlanév", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Aktuális dátum", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Nettó számla érték", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Nettó nem realizált hozam", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Havi nettó realizált hozam", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Havi tranzfer saját számlák között", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Havi jövedelem", rowNumberOfTarget)
Call PasteValueCellIntoAccountDateTable(rowNumberOfSource, "Havi költés", rowNumberOfTarget)
End Sub
Public Sub FillDownInAccountDateTable(ByVal columnName As String, ByVal rowNumberOfTarget As Integer)
Dim columnNumberOfTarget As Integer
columnNumberOfTarget = TableColumnToIndex("Számla dátum", "Számla_dátum[" & columnName & "]")
Sheets("Számla dátum").Select
Cells(rowNumberOfTarget, columnNumberOfTarget).Select
Selection.FillDown
End Sub
Public Sub PasteValueCellIntoAccountDateTable(ByVal rowNumberOfSource As Integer, ByVal columnName As String, ByVal rowNumberOfTarget As Integer)
Dim columnNumberOfTarget As Integer
Dim columnNumberOfSource As Integer
columnNumberOfSource = TableColumnToIndex("Utolsó hó", "Utolsó_hó[" & columnName & "]")
Sheets("Utolsó hó").Select
Cells(rowNumberOfSource, columnNumberOfSource).Copy
columnNumberOfTarget = TableColumnToIndex("Számla dátum", "Számla_dátum[" & columnName & "]")
Sheets("Számla dátum").Select
Cells(rowNumberOfTarget, columnNumberOfTarget).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
选择和复制/粘贴是慢速命令。避免选择并使用'Range.Copy Destination:= TopLeftCell'。但是'Application.ScreenUpdating = False'的遗漏是你失去大部分时间的原因。 –
您应该观看本系列[Excel VBA简介](https://www.youtube.com/playlist?list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5)。这是必须的:[Excel VBA简介第5部分 - 选择单元格(范围,单元格,活动单元格,结束,偏移)](https://www.youtube.com/watch?v=c8reU-H1PKQ&t=2805s&index=5&list= PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5) – 2016-11-19 09:40:34