我对编码很新,遇到了一个非常微不足道的问题。当我在' 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
任何帮助将不胜感激。谢谢大家!
答案 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
因此,Cells()
指的是ActiveSheet
,而不指Trade_Sheet
。一般来说,Activate
和Select
被认为是vba中的不良做法,因此最好避免使用它们:
值得一提的是,这可能是vba中最常见的错误,因此您可以为达到目的而自豪。我想几乎每个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