Запустить макрос из изменения значения и установить флажок

У меня есть некоторый рабочий код, который, когда установлен флажок, будет делать следующее: отображать лист «калькулятор путешествий», разблокировать текущий лист, изменять значение ячеек на основе ячеек из листа «калькулятор путешествий», затем блокировать текущий лист снова. Когда флажок не установлен, ячейки должны оставаться разблокированными, а «калькулятор путешествий» должен оставаться скрытым. Это здорово, однако я хотел бы, чтобы значение на текущем листе постоянно обновлялось на основе изменений, внесенных в калькулятор путешествий, когда установлен флажок (значение = True).

Есть ли у кого-нибудь какие-либо изменения в приведенном ниже коде, которые я мог бы попытаться обновить, когда значение поля = True И значение общей суммы поездок из листа «калькулятора путешествий» изменяется? Спасибо!

Private Sub travelcalc_Click()
ActiveSheet.Unprotect Password:="password"
    If Me.travelcalc.Value = False Then
    Range("C19:L20").Locked = False
    Sheets("Travel Calculator").Visible = False
Else
    Sheets("Travel Calculator").Visible = True
    Range("$C$19") = Worksheets("Travel Calculator").Range("$N$14")
    Range("$D$19") = Worksheets("Travel Calculator").Range("$P$14")
    Range("$E$19") = Worksheets("Travel Calculator").Range("$R$14")
    Range("$F$19") = Worksheets("Travel Calculator").Range("$T$14")
    Range("$G$19") = Worksheets("Travel Calculator").Range("$V$14")
    Range("$H$19") = Worksheets("Travel Calculator").Range("$X$14")
    Range("$I$19") = Worksheets("Travel Calculator").Range("$Z$14")
    Range("$J$19") = Worksheets("Travel Calculator").Range("$AB$14")
    Range("$K$19") = Worksheets("Travel Calculator").Range("$AD$14")
    Range("$L$19") = Worksheets("Travel Calculator").Range("$AF$14")
    Range("$C$20") = Worksheets("Travel Calculator").Range("$N$29")
    Range("$D$20") = Worksheets("Travel Calculator").Range("$P$29")
    Range("$E$20") = Worksheets("Travel Calculator").Range("$R$29")
    Range("$F$20") = Worksheets("Travel Calculator").Range("$T$29")
    Range("$G$20") = Worksheets("Travel Calculator").Range("$V$29")
    Range("$H$20") = Worksheets("Travel Calculator").Range("$X$29")
    Range("$I$20") = Worksheets("Travel Calculator").Range("$Z$29")
    Range("$J$20") = Worksheets("Travel Calculator").Range("$AB$29")
    Range("$K$20") = Worksheets("Travel Calculator").Range("$AD$29")
    Range("$L$20") = Worksheets("Travel Calculator").Range("$AF$29")
    Range("C19:L20").Locked = True
End If
    ActiveSheet.Protect Password:="password", AllowFormattingColumns:=True, AllowFormattingRows:=True
End Sub

person NU2this    schedule 09.03.2015    source источник


Ответы (2)


Назначьте следующий код рабочей таблице Travel Calculator. Он будет оценивать, были ли внесены изменения в общее значение каждый раз, когда вы перемещаете ячейку на листе Калькулятора пути, а поле «Расчет пути» проверяется и при необходимости обновляется. Он также будет обновляться, как только вы деактивируете лист, если установлен флажок Travelcalc.

Public originalTotalValue As Currency

Private Sub Worksheet_Activate()
origionalTotalValue = Worksheets("Travel Calculator").Range("Your Travel Value").Value

End Sub

Private Sub Worksheet_Deactivate()
If Me.travelcalc.Value = True Then
    Worksheets("Sheet Where Original Range is Located").Range("$C$19") = Worksheets("Travel Calculator").Range("$N$14")
    Worksheets("Sheet Where Original Range is Located").Range("$D$19") = Worksheets("Travel Calculator").Range("$P$14")
    Worksheets("Sheet Where Original Range is Located").Range("$E$19") = Worksheets("Travel Calculator").Range("$R$14")
    Worksheets("Sheet Where Original Range is Located").Range("$F$19") = Worksheets("Travel Calculator").Range("$T$14")
    Worksheets("Sheet Where Original Range is Located").Range("$G$19") = Worksheets("Travel Calculator").Range("$V$14")
    Worksheets("Sheet Where Original Range is Located").Range("$H$19") = Worksheets("Travel Calculator").Range("$X$14")
    Worksheets("Sheet Where Original Range is Located").Range("$I$19") = Worksheets("Travel Calculator").Range("$Z$14")
    Worksheets("Sheet Where Original Range is Located").Range("$J$19") = Worksheets("Travel Calculator").Range("$AB$14")
    Worksheets("Sheet Where Original Range is Located").Range("$K$19") = Worksheets("Travel Calculator").Range("$AD$14")
    Worksheets("Sheet Where Original Range is Located").Range("$L$19") = Worksheets("Travel Calculator").Range("$AF$14")
    Worksheets("Sheet Where Original Range is Located").Range("$C$20") = Worksheets("Travel Calculator").Range("$N$29")
    Worksheets("Sheet Where Original Range is Located").Range("$D$20") = Worksheets("Travel Calculator").Range("$P$29")
    Worksheets("Sheet Where Original Range is Located").Range("$E$20") = Worksheets("Travel Calculator").Range("$R$29")
    Worksheets("Sheet Where Original Range is Located").Range("$F$20") = Worksheets("Travel Calculator").Range("$T$29")
    Worksheets("Sheet Where Original Range is Located").Range("$G$20") = Worksheets("Travel Calculator").Range("$V$29")
    Worksheets("Sheet Where Original Range is Located").Range("$H$20") = Worksheets("Travel Calculator").Range("$X$29")
    Worksheets("Sheet Where Original Range is Located").Range("$I$20") = Worksheets("Travel Calculator").Range("$Z$29")
    Worksheets("Sheet Where Original Range is Located").Range("$J$20") = Worksheets("Travel Calculator").Range("$AB$29")
    Worksheets("Sheet Where Original Range is Located").Range("$K$20") = Worksheets("Travel Calculator").Range("$AD$29")
    Worksheets("Sheet Where Original Range is Located").Range("$L$20") = Worksheets("Travel Calculator").Range("$AF$29")
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim updatedTotalValue As Currency
updatedTotalValue = Worksheets("Travel Calculator").Range("Your Travel Value").Value
If Me.travelcalc.Value = True And originalTotalValue <> updatedTotalValue Then
    Worksheets("Sheet Where Original Range is Located").Range("$C$19") = Worksheets("Travel Calculator").Range("$N$14")
    Worksheets("Sheet Where Original Range is Located").Range("$D$19") = Worksheets("Travel Calculator").Range("$P$14")
    Worksheets("Sheet Where Original Range is Located").Range("$E$19") = Worksheets("Travel Calculator").Range("$R$14")
    Worksheets("Sheet Where Original Range is Located").Range("$F$19") = Worksheets("Travel Calculator").Range("$T$14")
    Worksheets("Sheet Where Original Range is Located").Range("$G$19") = Worksheets("Travel Calculator").Range("$V$14")
    Worksheets("Sheet Where Original Range is Located").Range("$H$19") = Worksheets("Travel Calculator").Range("$X$14")
    Worksheets("Sheet Where Original Range is Located").Range("$I$19") = Worksheets("Travel Calculator").Range("$Z$14")
    Worksheets("Sheet Where Original Range is Located").Range("$J$19") = Worksheets("Travel Calculator").Range("$AB$14")
    Worksheets("Sheet Where Original Range is Located").Range("$K$19") = Worksheets("Travel Calculator").Range("$AD$14")
    Worksheets("Sheet Where Original Range is Located").Range("$L$19") = Worksheets("Travel Calculator").Range("$AF$14")
    Worksheets("Sheet Where Original Range is Located").Range("$C$20") = Worksheets("Travel Calculator").Range("$N$29")
    Worksheets("Sheet Where Original Range is Located").Range("$D$20") = Worksheets("Travel Calculator").Range("$P$29")
    Worksheets("Sheet Where Original Range is Located").Range("$E$20") = Worksheets("Travel Calculator").Range("$R$29")
    Worksheets("Sheet Where Original Range is Located").Range("$F$20") = Worksheets("Travel Calculator").Range("$T$29")
    Worksheets("Sheet Where Original Range is Located").Range("$G$20") = Worksheets("Travel Calculator").Range("$V$29")
    Worksheets("Sheet Where Original Range is Located").Range("$H$20") = Worksheets("Travel Calculator").Range("$X$29")
    Worksheets("Sheet Where Original Range is Located").Range("$I$20") = Worksheets("Travel Calculator").Range("$Z$29")
    Worksheets("Sheet Where Original Range is Located").Range("$J$20") = Worksheets("Travel Calculator").Range("$AB$29")
    Worksheets("Sheet Where Original Range is Located").Range("$K$20") = Worksheets("Travel Calculator").Range("$AD$29")
    Worksheets("Sheet Where Original Range is Located").Range("$L$20") = Worksheets("Travel Calculator").Range("$AF$29")
    origionalTotalValue = updatedTotalValue
End If
End Sub
person daytonrazorback    schedule 09.03.2015
comment
daytonrazorback, спасибо за ответ! Мне нравится идея этого. Проблема с этим решением заключается в том, что ячейки из других листов также извлекаются из этого листа. Это большой бюджет, который многие люди попытаются сократить и точно рассчитать, обновив путешествие. Таким образом, если он запускается только после активации, то сумма бюджета также не будет обновляться, если только пользователь не перейдет от прямых затрат к поездкам, затем обратно к прямым затратам, а затем к странице. В идеале я бы включил значение изменения, которое будет работать, только если Me.travelcalc.Value = True - person NU2this; 10.03.2015
comment
NU2this, спасибо за дополнительную информацию. Я отредактировал свой ответ, чтобы отразить изменения. - person daytonrazorback; 10.03.2015
comment
daytonrazorback, Спасибо! В нем были некоторые ошибки, но я смог немного изменить, чтобы он работал. Плохая часть заключается в том, что теперь возникла другая проблема, которая, возможно, относится к другому вопросу здесь. Теперь, когда я ввожу значение в лист прямых затрат (лист с исходным диапазоном), вводится число, после чего я автоматически перехожу на другой лист. Я не могу найти код в рабочей книге, который мог бы вызвать это. - person NU2this; 11.03.2015

вот как выглядит код с моими изменениями. Этот фрагмент кода работает очень хорошо. Спасибо за помощь!

Private Sub travelcalc_Click()
ActiveSheet.Unprotect Password:="password"
    If Me.travelcalc.Value = False Then
    Range("C19:L20").Locked = False
    Sheets("Travel Calculator").Visible = False
Else
    Sheets("Travel Calculator").Visible = True
    Range("$C$19") = Worksheets("Travel Calculator").Range("$N$14")
    Range("$D$19") = Worksheets("Travel Calculator").Range("$P$14")
    Range("$E$19") = Worksheets("Travel Calculator").Range("$R$14")
    Range("$F$19") = Worksheets("Travel Calculator").Range("$T$14")
    Range("$G$19") = Worksheets("Travel Calculator").Range("$V$14")
    Range("$H$19") = Worksheets("Travel Calculator").Range("$X$14")
    Range("$I$19") = Worksheets("Travel Calculator").Range("$Z$14")
    Range("$J$19") = Worksheets("Travel Calculator").Range("$AB$14")
    Range("$K$19") = Worksheets("Travel Calculator").Range("$AD$14")
    Range("$L$19") = Worksheets("Travel Calculator").Range("$AF$14")
    Range("$C$20") = Worksheets("Travel Calculator").Range("$N$29")
    Range("$D$20") = Worksheets("Travel Calculator").Range("$P$29")
    Range("$E$20") = Worksheets("Travel Calculator").Range("$R$29")
    Range("$F$20") = Worksheets("Travel Calculator").Range("$T$29")
    Range("$G$20") = Worksheets("Travel Calculator").Range("$V$29")
    Range("$H$20") = Worksheets("Travel Calculator").Range("$X$29")
    Range("$I$20") = Worksheets("Travel Calculator").Range("$Z$29")
    Range("$J$20") = Worksheets("Travel Calculator").Range("$AB$29")
    Range("$K$20") = Worksheets("Travel Calculator").Range("$AD$29")
    Range("$L$20") = Worksheets("Travel Calculator").Range("$AF$29")
    Range("C19:L20").Locked = True
End If
ActiveSheet.Protect Password:="password", AllowFormattingColumns:=True, AllowFormattingRows:=True

End Sub

'the code below is entered into the travel sheet
Private Sub Worksheet_Calculate()
Worksheets("Direct Costs").Unprotect Password:="password"
Dim updatedTotalValue As Currency
Static oldval
    If Range("AG32").Value <> oldval Then
    oldval = Range("AG32").Value
    If Range("AL2").Value = True Then
    Worksheets("Direct Costs").Range("C19:L20").Locked = False
    Worksheets("Direct Costs").Range("$C$19") = Worksheets("Travel Calculator").Range("$N$14")
    Worksheets("Direct Costs").Range("$D$19") = Worksheets("Travel Calculator").Range("$P$14")
    Worksheets("Direct Costs").Range("$E$19") = Worksheets("Travel Calculator").Range("$R$14")
    Worksheets("Direct Costs").Range("$F$19") = Worksheets("Travel Calculator").Range("$T$14")
    Worksheets("Direct Costs").Range("$G$19") = Worksheets("Travel Calculator").Range("$V$14")
    Worksheets("Direct Costs").Range("$H$19") = Worksheets("Travel Calculator").Range("$X$14")
    Worksheets("Direct Costs").Range("$I$19") = Worksheets("Travel Calculator").Range("$Z$14")
    Worksheets("Direct Costs").Range("$J$19") = Worksheets("Travel Calculator").Range("$AB$14")
    Worksheets("Direct Costs").Range("$K$19") = Worksheets("Travel Calculator").Range("$AD$14")
    Worksheets("Direct Costs").Range("$L$19") = Worksheets("Travel Calculator").Range("$AF$14")
    Worksheets("Direct Costs").Range("$C$20") = Worksheets("Travel Calculator").Range("$N$29")
    Worksheets("Direct Costs").Range("$D$20") = Worksheets("Travel Calculator").Range("$P$29")
    Worksheets("Direct Costs").Range("$E$20") = Worksheets("Travel Calculator").Range("$R$29")
    Worksheets("Direct Costs").Range("$F$20") = Worksheets("Travel Calculator").Range("$T$29")
    Worksheets("Direct Costs").Range("$G$20") = Worksheets("Travel Calculator").Range("$V$29")
    Worksheets("Direct Costs").Range("$H$20") = Worksheets("Travel Calculator").Range("$X$29")
    Worksheets("Direct Costs").Range("$I$20") = Worksheets("Travel Calculator").Range("$Z$29")
    Worksheets("Direct Costs").Range("$J$20") = Worksheets("Travel Calculator").Range("$AB$29")
    Worksheets("Direct Costs").Range("$K$20") = Worksheets("Travel Calculator").Range("$AD$29")
    Worksheets("Direct Costs").Range("$L$20") = Worksheets("Travel Calculator").Range("$AF$29")
    Worksheets("Direct Costs").Range("C19:L20").Locked = True
End If
End If
    Worksheets("Direct Costs").Protect Password:="password", AllowFormattingColumns:=True, AllowFormattingRows:=True
End Sub
person NU2this    schedule 12.03.2015