![如果同一行中的對應範圍不為空,VBA 會反白顯示儲存格](https://rvso.com/image/1451242/%E5%A6%82%E6%9E%9C%E5%90%8C%E4%B8%80%E8%A1%8C%E4%B8%AD%E7%9A%84%E5%B0%8D%E6%87%89%E7%AF%84%E5%9C%8D%E4%B8%8D%E7%82%BA%E7%A9%BA%EF%BC%8CVBA%20%E6%9C%83%E5%8F%8D%E7%99%BD%E9%A1%AF%E7%A4%BA%E5%84%B2%E5%AD%98%E6%A0%BC.png)
如果 D 列到 DX(數量)中有任何值,我試圖在檔案的 B 列中強制執行食物名稱。
合理的是,如果收到任何未出現在文件中的新食品請求,用戶可以暫時鍵入食品名稱,然後輸入數量。這是為了確保操作員不會錯誤地輸入值或忘記傳達他們添加的新項目的訊息。
是否可以新增一個按鈕,可以檢查從 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
以及行上是否有值專案名和單價,它會將這些單元格標記為紅色,直到您在上面寫下任何內容。
如果你想自訂它,程式碼很容易修改。