工作表更改时,变量未存储在代码中

时间:2018-05-22 10:32:05

标签: excel vba excel-vba variables with-statement

我对编码很新,遇到了一个非常微不足道的问题。当我在' 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

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

2 个答案:

答案 0 :(得分:3)

问题是您没有正确定义工作表。请参见此处的点(点):

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

在您的代码中,您缺少其中两个: enter image description here

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

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

答案 1 :(得分:1)

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

 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
相关问题