Отображать MsgBox, если значение ячейки изменяется и не пусто

У меня есть диапазон (объединенная ячейка) M5:O5, который должен вызвать MsgBox следующим образом:

  • Если диапазон отредактирован и не равен нулю
  • Если диапазон удален до нулевого значения, MsgBox отсутствует.
  • Если выбран диапазон и поле пусто или содержит данные, то MsgBox отсутствует.

Что у меня есть на данный момент:

Private Sub Worksheet_Change(ByVal Target As Range)
   Dim billtoanswer As Integer
   'If IsNull(Range("M5:O5")) Then  <-- other stuff I was trying
   'End
       If (Application.Intersect(Range("M5:O5"), Target) Is Nothing) Then
       End If
       billtoanswer = MsgBox("Use this address for Bill To?", vbYesNo + vbQuestion, "Bill To?")
       If billtoanswer = vbYes Then
       Range("F26").Value = Range("M4").Value & ", " & Range("M5").Value
       End If
   End If
End Sub

Microsoft® Excel® для Microsoft 365 MSO (версия 2404, сборка 16.0.17531.20190), 64-разрядная версия

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim billtoanswer As Integer
   
   If (Application.Intersect(Range("M5:O5"), Target) Is Nothing) Then
      ' Skip
   Else
      If Trim(CStr(Target.Text)) = "" Then
         ' Skip
      Else
         billtoanswer = MsgBox("Use this address for Bill To?", vbYesNo + vbQuestion, "Bill To?")
         If billtoanswer = vbYes Then
            Range("F26").Value = Range("M4").Value & ", " & Range("M5").Value
         End If
      End If
   End If
End Sub

Я был так близко!!! Но не смог выяснить определение, если отредактировано ничего: If Trim(CStr(Target.Text)) = "" Тогда... и вот оно!!! Спасибо @Tin Bun

CapnBrownShoes 14.06.2024 03:15

Изменение рабочего листа: запись в другую ячейку

  • Событие изменения рабочего листа запускается каждый раз, когда вы вводите значения вручную, т. е. записываете или вставляете их на лист. Сюда входит запись на лист (с помощью VBA) во время выполнения кода события.

Приложение.EnableEvents

  • Чтобы предотвратить повторный запуск события последним, рекомендуется отключать события перед записью на лист во время выполнения кода события.
  • В данном случае это менее важно, поскольку при повторном запуске события произойдет завершение со строкой If Intersect..., но в худшем случае, если вы, например, запись в целевую ячейку (M5) во время выполнения кода события, повторное срабатывание события приведет к сбою Excel.

Цель

  • Переменная Target — это ссылка на все ячейки, которые были изменены. Если вы отслеживаете изменение в одной (целевой) ячейке, используйте переменную (targetCell) в продолжении кода, ссылаясь на пересечение ее (одной ячейки) и Target (не обязательно это должна быть одна ячейка). Используйте Target только в том случае, если вы убедились, что это одна ячейка, например. If Target.Cells.CountLarge = 1 Then.

Листовой модуль, например. Sheet1

Private Sub Worksheet_Change(ByVal Target As Range)
    ChangeBillingAddress Target
End Sub

Стандартный модуль, например. Module1, modEvents... (или тот же модуль листа)

Sub ChangeBillingAddress(ByVal Target As Range)

    Dim ws As Worksheet: Set ws = Target.Worksheet

    Dim targetCell As Range: Set targetCell = ws.Range("M5")
    If Intersect(targetCell, Target) Is Nothing Then Exit Sub
    If Len(CStr(targetCell.Value)) = 0 Then Exit Sub
    
    Dim BillToAnswer As Long
    BillToAnswer = MsgBox("Use this address for Bill To?", _
        vbYesNo + vbQuestion, "Bill To?")
    
    If BillToAnswer = vbNo Then Exit Sub
    
    Application.EnableEvents = False ' prevent retriggering the event
        ws.Range("F26").Value = CStr(ws.Range("M4").Value) _
            & ", " & CStr(targetCell.Value)
    Application.EnableEvents = True

End Sub 

Другие вопросы по теме

Похожие вопросы