Сделать ячейку обязательной в excel с помощью vba

Я пробовал этот код для создания обязательных полей, но проблема в том, что он показывает сообщение об ошибке перед тем, как перейти в ячейку.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim lastRow As Long With ActiveSheet lastRow = .Cells(.Rows.count, "A").End(xlUp).Row Dim I, J As Integer For I = 1 To lastRow If Cells(I, "C").Value = "" Then MsgBox "Please Enter Business Type Value", vbOKOnly Exit Sub End If 'If Cells(I, "D").Value = "" Then 'MsgBox "Please Enter Customer Account Code", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "E").Value = "" Then 'MsgBox "Please Enter Transport Mode Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "F").Value = "" Then 'MsgBox "Please Enter Incoterm Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "K").Value = "" Then 'MsgBox "Please Enter From date Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "L").Value = "" Then 'MsgBox "Please Enter To date Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "K").Value > Cells(I, "L").Value Then 'MsgBox "To date value should greater than From value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "N").Value = "" Then 'MsgBox "Please Enter Origin Country Code Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "O").Value = "" Then 'MsgBox "Please Enter Point of Origin Location Code Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "R").Value = "" Then 'MsgBox "Please Enter Port of Loading Code Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "S").Value = "" Then 'MsgBox "Please Enter Origin Clearance Location Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "T").Value = "" Then 'MsgBox "Please Enter Destination Clearance Location Value", vbOKOnly 'Exit Sub 'End If 'If Cells(I, "U").Value = "" Then 'MsgBox "Please Enter Port of Discharge Code Value", vbOKOnly 'Exit Sub 'End If If Cells(I, "Y").Value = "" Then MsgBox "Please Enter Consignee Final Destination Location Code Value", vbOKOnly Exit Sub End If If Cells(I, "Z").Value = "" Then MsgBox "Please Enter Destination Country Code Value", vbOKOnly Exit Sub End If If Cells(I, "AF").Value = "" Then MsgBox "Please Enter Active status Value", vbOKOnly Exit Sub End If If Cells(I, "AH").Value = "" Then MsgBox "Please Enter Carrier Allocation Number Value", vbOKOnly Exit Sub End If If Cells(I, "AI").Value = "" Then MsgBox "Please Enter Carrier Allocation Valid From Date Value", vbOKOnly Exit Sub End If If Cells(I, "AJ").Value = "" Then MsgBox "Please Enter Carrier Nomination Sequence Number Value", vbOKOnly Exit Sub End If Next I End With End Sub 

Этот код

  • дорожки A1: A10, чтобы увидеть, изменены ли какие-либо ячейки
  • затем проверяет, не является ли соответствующая ячейка в строке Y пустой
    • если пустым, возвращается сообщение, и ячейка в A1: A10, которая была изменена, затем погашается

код

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) 'exit if no cells in A1:A10 are changed If rng1 Is Nothing Then Exit Sub 'turn off events to avoid code retriggering itself Application.EnableEvents = False For Each rng2 In rng1 If Cells(rng2.Row, "Y") = vbNullString Then MsgBox "Please Enter Consignee Final Destination Location Code Value, your entry will be deleted", vbOKOnly rng2.Value = vbNullString End If Next Application.EnableEvents = True End Sub 

Другим подходом будет:

  1. В вашем Worksheet_SelectionChange сделайте все ячейки, которые не пропускают ваши чеки, красные. Все, кто проходит ваши проверки зелеными. Вы можете сделать это со следующим кодом. Не создавайте сообщений об ошибках в этой процедуре.

Range("A1").Interior.Color = RGB(255, 0, 0) 'red

Range("A1").Interior.Color = RGB(0, 255, 0) 'green

  1. Сделайте только сохранение сохраненной книги, если все ваши чеки пройдены. Поэтому вы можете использовать proceudre, который я вам предоставил в другом ответе.

Я думаю, что событие, которое вы используете, может вызвать вашу проблему.

Вы можете реализовать обязательные поля с событием Workbook_BeforeSave . Это будет запущено, как только пользователь попытается сохранить файл excel. Теперь вы проверяете все поля, которые вы определяете как обязательные, и отображаете соответствующее «сообщение об ошибке».

Когда вы устанавливаете Cancel = True вы можете прервать процесс сохранения, который действительно заставляет пользователя добавлять что-либо в нужные поля.

В событии Workbook_BeforeSave вы можете вставить все свои проверки, которые вы уже внедрили.

Более подробную информацию о Workbook_BeforeSave можно найти здесь: https://msdn.microsoft.com/de-de/library/office/ff840057.aspx

Здесь вы можете найти дополнительную информацию о том, как реализовать событие Workbook_BeforeSave : http://www.positivevision.biz/blog/bid/153139/Excel-Tips-and-Tricks-Mandatory-Cell-Input

Interesting Posts

Динамический выбор серий на графике Excel

COMException (0x80010108 – RPC_E_DISCONNECTED) При закрытии Excel.Workbook

Данные Excel формируются с использованием только одного DataFormat с использованием poi

Изменение фона MS Excel 2003

Как выводить содержимое Excel.workbook в существующий файл Excel из приложения C #?

Как удалить специальную строку

Исключения, выполняющие единичные тесты против Excel в Team Build 2010

Excel VBA – формат сохраненных значений изменяется при вводе в ячейку

Как копировать / вставлять данные листа без включения ActiveXButtons

Openpyxl: итерация по диапазону ячейки

Как я могу получить ячейку в фиксированном столбце, но динамическую строку, чтобы изменить, когда обновляется другая ячейка в соответствующей строке?

Формула Excell, чтобы найти номер 3 в столбце ah, затем отобразить текст из той же строки в столбце A

Удалить кулачную колонку со всего листа, кроме текущего листа в excel

JXL и Apache POI синтаксический анализ с прикрепленными объектами изображения

SenderEmailAddress в коде vba, дающий путь в excel

Давайте будем гением компьютера.