![VBA выделяет ячейку, если соответствующий диапазон в той же строке не пуст](https://rvso.com/image/1451242/VBA%20%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D1%82%20%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D1%83%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D1%81%D0%BE%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B8%D0%B9%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%20%D0%B2%20%D1%82%D0%BE%D0%B9%20%D0%B6%D0%B5%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20%D0%BD%D0%B5%20%D0%BF%D1%83%D1%81%D1%82.png)
Я пытаюсь принудительно указать название продукта в столбце B файла, если в столбце D-DX (Кол-во) есть какое-либо значение.
Рационально, если получен новый запрос на еду, которого нет в файле, пользователь может временно ввести название еды, а затем ввести количество. Это делается для того, чтобы оператор не ввел значение по ошибке или не забыл передать информацию о новом добавленном элементе.
Можно ли добавить кнопку, которая могла бы проверять все листы от D6 до DX98, и если найдено какое-либо количество, и если соответствующая ячейка в C пуста, то помечать C красным цветом, а простое сообщение MsgBox сообщать о наличии ошибки в файле.
Файл, над которым я работаю, выглядит следующим образом: http://s000.tinyupload.com/?file_id=00523976624440052148
решение1
Откройте Макросы / Visual Basic, дважды щелкните по листу и вставьте этот код справа:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wkb As Workbook
Dim wks As Worksheet
Dim wksRange As Range
Set wkb = ThisWorkbook
Set wks = ActiveSheet
For i = 6 To 98 ' rows to be sweeped
Set wksRange = wks.Range(Cells(i, 4), Cells(i, 127)) ' check from column 4 (D) to 127(DW)
'Paint grey cells on columns A to C
color_cell_a = Cells(i, 1).Interior.Color
Cells(i, 2).Interior.Color = color_cell_a
Cells(i, 3).Interior.Color = color_cell_a
'If on the row there are values
If WorksheetFunction.CountA(wksRange) <> 0 Then
itemName = Cells(i, 2)
itemPrice = Cells(i, 3)
'Change color on column B
If itemName = "" Then
Cells(i, 2).Interior.Color = RGB(184, 0, 0)
End If
'Change color on column C
If itemPrice = "" Then
Cells(i, 3).Interior.Color = RGB(184, 0, 0)
End If
End If
Next i
End Sub
Он проверяет область покрытия D6:DW98
и наличие значений в строке безИмя элементаиЦена за единицу товара, он будет отмечать эти ячейки красным цветом до тех пор, пока вы не запишете в них что-нибудь.
Код очень легко изменить, если вы захотите его настроить.