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
。一般来说,Activate
和 Select
在 vba 中被认为是不好的做法,因此最好避免使用它们:
- How to avoid using Select in Excel VBA.
关于价值,这可能是 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
我对编码还很陌生,遇到了一个可能非常微不足道的问题。当我在 '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
。一般来说,Activate
和 Select
在 vba 中被认为是不好的做法,因此最好避免使用它们:
- How to avoid using Select in Excel VBA.
关于价值,这可能是 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