为什么我的VBA循环会粘贴不正确的值?

为什么我的VBA循环会粘贴不正确的值?,vba,excel,excel-2010,Vba,Excel,Excel 2010,我创建了一个循环,其中数据从一个工作表复制并粘贴到另一个工作表中,但粘贴功能存在问题–有时粘贴错误的数据,看起来是随机的。我目前的代码是: Sub ACCPR_LOOP() Dim wsACC_PR As Worksheet Set wsACC_PR = ThisWorkbook.Sheets("ACC PR") Dim wsPR_CALC As Worksheet Set wsPR_CALC = ThisWorkbook.Sheets("PR - CALC") Dim MyRange

我创建了一个循环,其中数据从一个工作表复制并粘贴到另一个工作表中,但粘贴功能存在问题–有时粘贴错误的数据,看起来是随机的。我目前的代码是:

    Sub ACCPR_LOOP()

Dim wsACC_PR As Worksheet
Set wsACC_PR = ThisWorkbook.Sheets("ACC PR")
Dim wsPR_CALC As Worksheet
Set wsPR_CALC = ThisWorkbook.Sheets("PR - CALC")
Dim MyRange As Range
Dim MyCell As Range
Set MyRange = Range("A2:A145")

Application.ScreenUpdating = False    
Columns("B:C").ClearContents

For Each MyCell In MyRange
    MyCell.Copy
    wsPR_CALC.Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    wsPR_CALC.Range("B226,B228").Copy
    MyCell.Offset(0, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=True

Next MyCell

End Sub
代码所做的是在列A中创建一组日期,它将日期复制到列A中,然后将其粘贴到另一个工作表中,以更新下拉日期选择器并更改数据。然后将其中两个单元格复制并粘贴回原始工作表,偏移量为1列。由于某些原因,有时会粘贴中上一个日期的数据。例如,A17中的日期被复制并粘贴到日期选择器中,然后正确的数据被粘贴到B17中,但在下一步,与A17相关的数据被粘贴到B18的下一行中

如果出现问题,请重复该行:

MyCell.Offset(0, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=True

代码可以工作,但这似乎效率很低。你知道我的代码中发生了什么,以及如何修复它吗

设置MyRange=Range(“A2:A145”)
中,您还应该声明相应的工作表。例如:

Set MyRange = Worksheets("MyNameIsWhat").Range("A2:A145")
否则,它将使用
ActiveWorksheet
,并将
MyRange
分配给它


这同样适用于
列(“B:C”)。ClearContents


它应该是
工作表(“TsakaTsakaSlimShaddy”)。列(“B:C”)。ClearConents

我总是尽量避免VBA中的复制/粘贴功能。它的处理器密集型和功能。。。神秘地

请尝试以下方法:

For Each MyCell In MyRange
    wsPR_CALC.Range("A1").Value = MyCell.Value
    Application.Calculate
    MyCell.Offset(0, 1).Value = wsPR_CALC.Range("B226,B228").Value
Next MyCell
您将丢失数字格式,但还有其他方法。 我还添加了一个
应用程序.Calculate
行,因为它看起来像是在第二步从公式复制,最好确保更新该值。您也可以尝试
Application.CalculateFull
(如果是普通的)。Calculate不会剪切它


此外,对于echo Vit,如果您正在处理多张工作表,那么尽可能多地声明您的工作表也会有所帮助。

喜欢Eminem参考,仅此而已!:)“SlimShady”如上文所述,未将范围指定给图纸。当您将焦点转移到多个范围未明确“路径”的工作表时,Excel不会知道您想要什么。