我有一个Excel电子表格,A列格式为日期03-Mar
。如果输入了错误的月份,我正试图创建一个宏来显示消息框。
问题是消息框显示双向
Private Sub Worksheet_Change(ByVal Target As Range)
Dim M As String
Dim W As String
M = May
W = Apr
If ActiveCell = W Then
MsgBox ("Wrong Month entered")
Exit Sub
ElseIf ActiveCell = M Then
Exit Sub
End If
End Sub
May
和Apr
被视为变量(它们是空的(。因此,您的代码无法工作。请确保使用Option Explicit
,这将立即显示此类问题。
日期也以数字形式存储在Excel中。该数字是自1900-01-01
以来的天数。所以今天是2022-03-07
,Excel将其存储为44627
,这意味着今天是自1900-01-01
以来的44627
天。因此,单元格中的实际值是44627
,如果使用.NumberFormat
对其进行格式化,Excel只会显示其他内容,如03-Mar
,但单元格值仍然是一个数字。
因此,如果你想知道数字日期是哪个月,你可以使用Month()
方法,因为May
是5
,你可以很容易地测试它:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' exit if more than one cell was changed
If Target.Cells.CountLarge > 1 Then Exit Sub
If Month(Target.Value) <> 5 Then ' If month not may then messagebox
MsgBox "Wrong Month entered"
End If
End Sub