Автоматический рабочий лист, вычисляющий изменение значения ячейки, не работает - PullRequest
0 голосов
/ 24 октября 2018

У меня возникла проблема с TextBoxes в пользовательской форме, а также с двумя ячейками на другом листе в одной и той же книге, которые обновляются автоматически, поскольку Worksheet_Change(ByVal Target as Range) не выполняет вычисления автоматически.Ниже приведен текущий код, который не работает, и я думаю, что его из-за If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing.У меня нет Application.EnableEvents в любом месте, которое могло бы повлиять на эти ячейки или текстовые поля, на которые ссылается приведенный ниже код.Любая помощь будет принята с благодарностью.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim wb As Workbook
    Dim wspGen As Worksheet
    Dim KeyCells As Range, genLTV As Range, genCLTV As Range

    Set KeyCells = Range("Loan_Amount, Estimated_Value, Purchase_Price, Total_Other_Mtg, Additional_Collateral, LTV, CLTV")
    Set genLTV = wspGen.Range("GenLTV")
    Set genCLTV = wspGen.Range("GenCLTV")

    'I believe this is looking to see if all cell values in this range have changed and not the individual cell value has changed
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then  
        genLTV = LTV
        genCLTV = CLTV
        LP.LTV = LTV   'Userform TextBox
        LP.CLTV = CLTV 'Userform TextBox
        Call LTVFormat
    End If

End Sub

1 Ответ

0 голосов
/ 24 октября 2018

Спасибо всем за ваши идеи и помощь, но я решил взять формулы с листа.Я создал подпрограмму внутри модуля, а затем вызвал подпрограмму из события Worksheet_Change, и теперь она работает.Я уверен, что код может быть намного чище, но сейчас он работает.

Код модуля:

 Sub LTVCalcs()
    Dim wb As Workbook
    Dim wsSI As Worksheet, wspGen As Worksheet
    Dim lAmount As Range, pPrice As Range, eVal As Range, oMtg As Range, oColl As Range, LTV As Range, CLTV As Range, genLTV As Range, genCLTV As Range, keyCells As Range
    Dim x As Integer

    Set wb = Application.ThisWorkbook
    Set wsSI = wb.Sheets("SavedInfo")
    Set wspGen = wb.Sheets("pGeneralInfo")
    Set lAmount = wsSI.Range("Loan_Amount")
    Set pPrice = wsSI.Range("Purchase_Price")
    Set eVal = wsSI.Range("Estimated_Value")
    Set oMtg = wsSI.Range("Total_Other_Mtg")
    Set oColl = wsSI.Range("Additional_Collateral")
    Set LTV = wsSI.Range("LTV")
    Set CLTV = wsSI.Range("CLTV")
    Set genLTV = wspGen.Range("GenLTV")
    Set genCLTV = wspGen.Range("GenCLTV")

    Set keyCells = wsSI.Range("Loan_Amount,Purchase_Price,Estimated_Value,Total_Other_Mtg,Additional_Collateral")
    oMtg = Application.WorksheetFunction.Sum(wsSI.Range("_2nd_Mtg_Amount"), wsSI.Range("_3rd_Mtg_Amount"), wsSI.Range("_4th_Mtg_Amount"), wsSI.Range("_5th_Mtg_Amount"))

    If lAmount = vbNullString Then lAmount = 0
    If pPrice = vbNullString Then pPrice = 0
    If eVal = vbnulsltring Then eVal = 0
    If oMtg = vbNullString Or oMtg = 0 Then oMtg = 0
    If oColl = vbNullString Then oColl = 0
    If LTV = vbNullString Then LTV = 0
    If CLTV = vbNullString Then CLTV = 0

    If eVal <= pPrice Then
        x = 1
    Else: x = 2
    End If

    Application.EnableEvents = False

    For Each cell In keyCells
        If cell.Value >= 0 Then Application.EnableEvents = True
            Select Case x
                Case Is = 1
                    LTV = lAmount / (eVal + oColl)
                    CLTV = (lAmount + oMtg) / (eVal + oColl)
                    LP.LTV = LTV
                    LP.CLTV = CLTV
                    genLTV = LTV
                    genCLTV = CLTV
                Case Is = 2
                    LTV = lAmount / (pPrice + oColl)
                    CLTV = (lAmount + oMtg) / (pPrice + oColl)
                    LP.LTV = LTV
                    LP.CLTV = CLTV
                    genLTV = LTV
                    genCLTV = CLTV
            End Select
    Next cell

    Application.EnableEvents = True

End Sub

Код в модуле Worksheet:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("Loan_Amount") Then Call LTVCalcs
    If Target.Address = Range("Estimated_Value") Then Call LTVCalcs
    If Target.Address = Range("Total_Other_Mtg") Then Call LTVCalcs
    If Target.Address = Range("Additional_Collateral") Then Call LTVCalcs
    If Target.Address = Range("Purchase_Price") Then Call LTVCalcs
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...