Переменная не сохраняется в коде при смене листа - PullRequest
0 голосов
/ 22 мая 2018

Я довольно новичок в кодировании и столкнулся с, вероятно, очень тривиальной проблемой.Когда я построчно запускаю код на вкладке «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 голосов
/ 22 мая 2018

Возможно, проблема в том, что у вас не было точек в этой части кода?

 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
0 голосов
/ 22 мая 2018

Проблема в том, что вы не определяете лист правильно.См. Точки (точки) здесь:

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 из них: enter image description here

Таким образом, Cells() относитсяк ActiveSheet, а не к Trade_Sheet.В общем, Activate и Select считаются плохой практикой в ​​, поэтому рекомендуется избегать их:


Для чего стоит, это, вероятно, самая распространенная ошибка в , поэтому вы можете гордиться собойдля достижения этого.Я предполагаю, что почти каждый человек VBA испытал это по крайней мере один раз.

...