sheet 更改时变量未存储在代码中

Variable not being stored in the code when sheet changes

我对编码还很陌生,遇到了一个可能非常微不足道的问题。当我在 'Trade_Sheet' 选项卡中逐行 运行 代码时,变量 Date_range 被正确选择为先前复制的日期,并在 7 天后更新。但是,当我 运行 宏所在的主选项卡 'Share_Calc_Tab' 中的宏时,问题就来了。如果我这样做,变量 Date_range 似乎设置为 0,并且在执行其余操作时,日期将丢失。

代码如下:

Sub Audit_Trade()

    Dim Trade_Sheet As Worksheet
    Dim Share_Calc_Tab As Worksheet
    Dim lastrow As Long
    Dim Date_range As Date

    Set Trade_Sheet = ThisWorkbook.Worksheets("Trades")
    Set Share_Calc_Tab = ThisWorkbook.Worksheets("End Share Calc (ESC) GLOBAL")

    Application.ScreenUpdating = False

    With Trade_Sheet

        lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        Date_range = Cells(lastrow, 1).Offset(-27, 0).Value
        Cells(lastrow + 2, 1).Value = Date_range + 7

    End With

    Share_Calc_Tab.Activate
    Range("Trade_Instruction_Daily").Copy
    Trade_Sheet.Activate
    Cells(lastrow + 3, 1).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False

    Share_Calc_Tab.Activate
    Range("B22").Select

    Application.ScreenUpdating = True

End Sub

任何帮助将不胜感激。谢谢大家!

问题是您没有正确定义工作表。在这里查看点(点):

With Trade_Sheet
    lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    Date_range = .Cells(lastrow, 1).Offset(-27, 0).Value
    .Cells(lastrow + 2, 1).Value = Date_range + 7
End With

在您的代码中,您缺少其中的 2 个:

因此,Cells() 指的是 ActiveSheet,而不是 Trade_Sheet。一般来说,ActivateSelect 中被认为是不好的做法,因此最好避免使用它们:

  • How to avoid using Select in Excel VBA.

关于价值,这可能是 中最常见的错误,因此您可以为自己达到它而自豪。我想几乎每个 VBA 人都至少经历过一次。

也许问题是你在这部分代码中没有点?

 lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
 Date_range = .Cells(lastrow, 1).Offset(-27, 0).Value
 .Cells(lastrow + 2, 1).Value = Date_range + 7