我没有太多编写宏的经验,因此需要这个社区的帮助来解决以下遇到的问题:
我的宏复制在一个工作表中垂直范围内输入的一系列值,然后将这些值水平(转置)粘贴到另一个工作表中。理论上,它会将第一张工作表中的值粘贴到没有内容的第二张工作表的第一行。由于前五行有内容,因此它将值粘贴到第六行。我在运行宏时遇到的问题是我觉得它太慢了,因此我希望它运行得更快。
我有相同的宏做同样的事情,但是将值粘贴到另一个工作表的第一行,它运行完美。
因此,我最好的猜测是第二个宏运行缓慢,因为它必须在第六行开始粘贴,并且前 5 行可能有一些内容需要很长时间才能让宏通过(有很多对其他工作簿的单元格引用)以确定下一行粘贴的位置。这是我最好的猜测,因为我对宏几乎一无所知,所以我不能确定问题出在哪里。
我特此向您提供我的宏的代码,并真诚地希望有人能告诉我是什么让我的宏变慢,并为我提供如何使其运行更快的解决方案。我在想一个解决方案可能是宏不应该考虑前五行数据并立即开始在第 6 行粘贴第一个条目。然后在下一次第 7 行,等等。这可能是一个解决方案,但我不知道如何以一种可以做到这一点的方式编写代码。
感谢您花时间帮助我找到解决方案,这里是代码:
Sub Macro1()
Application.ScreenUpdating = False
Dim historyWks As Worksheet
Dim inputWks As Worksheet
Dim nextRow As Long
Dim oCol As Long
Dim myCopy As Range
Dim myTest As Range
Dim lRsp As Long
Set inputWks = wksPartsDataEntry
Set historyWks = Sheet11
'cells to copy from Input sheet - some contain formulas
Set myCopy = inputWks.Range("OrderEntry2")
With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
With inputWks
Set myTest = myCopy.Offset(0, 2)
If Application.Count(myTest) > 0 Then
MsgBox "Please fill in all the cells!"
Exit Sub
End If
End With
With historyWks
With .Cells(nextRow, "A")
.Value = Now
.NumberFormat = "mm/dd/yyyy hh:mm:ss"
End With
.Cells(nextRow, "B").Value = Application.UserName
oCol = 3
myCopy.Copy
.Cells(nextRow, 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End With
'clear input cells that contain constants
With inputWks
On Error Resume Next
With myCopy.Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.GoTo .Cells(1) ', Scroll:=True
End With
On Error GoTo 0
End With
Application.ScreenUpdating = True
End Sub