我有这个当前代码,可以在循环中复制和粘贴值。它工作正常,但是当数据很多时需要很长时间才能完成。我认为有一种更有效的方法可以使用 .value 来做到这一点,但我需要一些关于如何实施的建议。
Sub Looping()
Dim OFFSETDOWN As String
Dim OFFSETLEFT As String
Dim OFFSETRITE As String
Dim FILEDONE As String
OFFSETDOWN = 1
OFFSETLEFT = 0
FILEDONE = "Calculate"
Sheets("Emp Data").Select
Range("E5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
Range("A10").Select
ActiveCell.Offset(2, 0).Select
Do Until FILEDONE = ""
'OFFSETDOWN = 0
'OFFSETLEFT = 0
'OFFSETRITE = 1
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 4).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 2).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Results").Select
Range("D11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("J10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 9).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("J12").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("J11").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("d8").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("d3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("j26").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Results").Select
Range("j27").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Emp Data").Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Emp Data").Select
ActiveCell.Offset(1, -29).Select
FILEDONE = ActiveCell.Value
Loop
End Sub
我尝试实现其他教程中的 .value 方法,但我无法弄清楚如何正确实现它。任何有关改进此代码和更多地理解此主题的帮助将不胜感激。
Sub UpdateEmpData()
' Define constants.
Const EMP_FIRST_ROW As Long = 12
Const EMP_BLANK_INDEX As Long = 0
Dim eColsRead() As Variant: eColsRead = VBA.Array( _
"A", "B", "F", "G", "I", _
"J", "K", "L", "M", "N", _
"O")
Dim rCellsWrite() As Variant: rCellsWrite = VBA.Array( _
"D2", "D14", "D3", "D4", "D5", _
"D6", "D13", "D15", "D8", "D10", _
"D11")
Dim rCellsRead() As Variant: rCellsRead = VBA.Array( _
"J10", "J12", "J11", "D8", "D3", _
"J26", "J27")
Dim eColsWrite() As Variant: eColsWrite = VBA.Array( _
"X", "Y", "Z", "AA", "AB", _
"AC", "AD")
' Reference the objects (workbook and worksheets).
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ews As Worksheet: Set ews = wb.Sheets("Emp Data")
Dim rws As Worksheet: Set rws = wb.Sheets("Results")
' Write...
rws.Range("D1").Value = ews.Range("E5").Value
' Set the first row in Emp.
Dim er As Long: er = EMP_FIRST_ROW
' Loop...
Dim c As Long
Do
If Len(CStr(ews.Cells(er, eColsRead(EMP_BLANK_INDEX)).Value)) = 0 Then
Exit Do ' when cell in column 'A' is blank
End If
' Read from Emp, write to Results.
For c = 0 To UBound(eColsRead)
rws.Range(rCellsWrite(c)).Value = ews.Cells(er, eColsRead(c)).Value
Next c
' Read from Results, write to Emp.
For c = 0 To UBound(eColsWrite)
ews.Cells(er, eColsWrite(c)).Value = rws.Range(rCellsRead(c)).Value
Next c
er = er + 1
Loop
' Inform.
MsgBox "Emp data updated.", vbInformation
End Sub