我有幾個計算百分比的單元格范圍 A1:A12。我想設定一個角色,如果這些單元格中的百分比介于 3% 和 5% 之間,則會出現訊息框。我正在嘗試以下代碼:
Private Sub Worksheet_Calculate()
If Range("A1:A12").Value > 2% And Range("A1:A12").Value <= 5% Then
MsgBox "Message"
Else
Exit Sub
End Sub
有人可以幫我調整代碼以使其正常作業,看起來它根本不接受它。
uj5u.com熱心網友回復:
我可能會使用以下代碼來解決這個問題。
Private Sub Worksheet_Calculate()
Dim cellsbetween As Long, c As Range
cellsbetween = 0
For Each c In Range("A1:A12").Cells
If c.Value > 0.02 And c.Value <= 0.05 Then cellsbetween = cellsbetween 1
Next
If cellsbetween > 0 Then MsgBox "There are " & cellsbetween & " cell(s) in the 2% - > 5% range"
End Sub
每次掃描只會顯示一次彈出視窗。不過還是有問題。如果您不做任何事情來更改 3%-5% 范圍內的值,那么您會對該彈出視窗感到非常惱火。
一種替代方法是監視源單元格(從用戶輸入更改的單元格,而不是從重新計算更改的單元格),并且僅在這些單元格更改時才運行上述代碼 - 由Worksheet_Change()事件檢測到。
最后,這是實作目標的另一種方法,它使用更復雜的方法和更可靠的方法來識別單元格值(當它包含公式時)的變化。
Private Sub Worksheet_Calculate()
Dim cellsbetween As Long, c As Range
cellsbetween = 0
Application.EnableEvents = False
For Each c In Range("A1:A12").Cells
If c.Value > 0.02 And c.Value <= 0.05 And c.Value <> c.Offset(0, 51).Value Then
cellsbetween = cellsbetween 1
MsgBox "Cell " & c.Address & " is in the 2% - > 5% range"
End If
c.Offset(0, 51) = c.Value
Next
Application.EnableEvents = True
End Sub
此方法將值存盤在列中AZ(如果需要,您可以隱藏此列),以便它可以測驗值是否實際發生了變化。這樣,無論表格重新計算多少次,每次實際值更改時才會出現彈出視窗。
uj5u.com熱心網友回復:
嘗試這個:
Dim row As Range
For Each row In Range("A1:A12").Rows
If Val(row.Cells(1, 1).Value) > 0.03 And Val(row.Cells(1, 1).Value) <= 0.05 Then
MsgBox ("message")
End If
Next
這是正確的回圈方式,您不能將整個范圍與單個值進行比較,如果范圍包含多個單元格,則它是一個陣列,您需要檢查每個單獨的單元格。
當小數點分隔符是逗號(我的情況)時,代碼有問題,但當它是一個點時效果很好(我希望是你的情況)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/496720.html
