Как мне обработать ошибку, когда ячейка пуста и есть много подпрограмм - PullRequest
0 голосов
/ 07 октября 2018

У меня есть лист с большим количеством кода, над которым я работал последние пару лет, но я новичок в VBA и не включал обработку ошибок.Я попробовал несколько вещей, но я никогда не мог заставить это работать.Это действительно не влияло на меня до недавнего времени.Большинство моих процедур управляются ячейкой, в которой указана продажная цена (ячейка D5).Я использую цель Worksheet_Change ByVal в качестве диапазона, чтобы изменить положение вещей при изменении разных ячеек, поэтому при изменении продажной цены запускаются процедуры.Что я заметил, так это то, что именно эта процедура является первой, которая выдает мне ошибку VBA, если я удаляю продажную цену в ячейке D5.Поэтому я подумал, что могу попросить кого-нибудь дать мне простой код, чтобы перехватить пустую ячейку до запуска процедуры, и, возможно, всплывающее окно с надписью «Цена продажи не может быть пустой» и, возможно, вернуться к предыдущему значению этой ячейки.Ошибка отладки приводит меня к строке кода, которая начинается с "If Sheets (" Main "). Range (" D6 "). Значение <0.8001" </p>

Sub Calc_MI()
If Sheets("Main").Range("D12").Value = "FHA" Then
Sheets("Main").Range("D16").Value = 0.85
Else
If Sheets("Main").Range("D6").Value < 0.8001 Or 
   Sheets("Main").Range("D12").Value = "VA" Then
   Sheets("Main").Range("D16").Value = ""
Else
If Sheets("Main").Range("G14").Value > 0.45 Then
   Sheets("Main").Range("D16").Value = (Sheets("Closing 
   Costs").Range("BP100").Value + Sheets("Closing 
   Costs").Range("BP101").Value + Sheets("Closing 
   Costs").Range("BP102").Value)
 Else
 Sheets("Main").Range("D16").Value = (Sheets("Closing 
 Costs").Range("BP100").Value + Sheets("Closing 
 Costs").Range("BP102").Value)
 End If
 End If
 End If
 End Sub

любая помощь будет принята с благодарностью: -)

1 Ответ

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

Вы можете разместить это в "Основной" панели кода листа

Option Explicit

Dim oldVal As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$5" Then
        If IsEmpty(Target) Then
            MsgBox "Sales Price cannot be blank"
            Application.EnableEvents = False ' disable events to prevent change event fire in an infinite loop
            Target.Value = oldVal ' restore old backup value
            Application.EnableEvents = True ' enable events back
        End If
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$D$5" Then oldVal = Target.Value ' if D5 selected then backup its value
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...