Excel2007宏验证输入单元格的数据,如果不正确,则显示msgbox
请有人帮我输入以下代码。它在以下行中给出了一个错误:Excel2007宏验证输入单元格的数据,如果不正确,则显示msgbox,excel,if-statement,excel-2007,msgbox,vba,Excel,If Statement,Excel 2007,Msgbox,Vba,请有人帮我输入以下代码。它在以下行中给出了一个错误: Set range = "C5:L14" 这是完整的代码: Private Sub Worksheet_Change(ByVal Target As Excel.range) Dim ws As Worksheet Dim range As Worksheet Set ws = Application.ActiveSheet Set range = "C5:L14" If Not Application.Intersect(Target
Set range = "C5:L14"
这是完整的代码:
Private Sub Worksheet_Change(ByVal Target As Excel.range)
Dim ws As Worksheet
Dim range As Worksheet
Set ws = Application.ActiveSheet
Set range = "C5:L14"
If Not Application.Intersect(Target, range("C5:L14")) Is Nothing Then
If range("C5:L14").Value = "" Then Exit Sub
If range("C5:L14").Date = "< today()" Then Exit Sub
If range("C5:L14").Date = "> today()" Then MsgBox ("Future dates not allowed!")
Else
MsgBox ("Please enter date as follows yyyy-mm")
End If
End Sub
Private子工作表\u更改(ByVal目标为Excel.range)
将ws设置为工作表
将范围变暗为工作表
设置ws=Application.ActiveSheet
设置范围=“C5:L14”
如果不是,那么Application.Intersect(目标,范围(“C5:L14”))什么都不是
如果范围为(“C5:L14”).Value=“”,则退出Sub
如果范围(“C5:L14”).Date=“today()”则MsgBox(“不允许将来的日期!”)
其他的
MsgBox(“请输入日期,如下yyyy-mm”)
如果结束
端接头
单元格上的日期格式为“2013年1月”。不允许将来的日期,用户只应键入日期“2013-01”。格式应正确更改。如果他们输入“2013年1月”,则条件格式不会选择它。我尝试过数据验证,但仅限于一个
我需要宏来确保用户没有在指定的单元格中输入错误的日期。您尝试的内容也可以在没有VBA的情况下解决。然而,我向你们展示了这两种方法。你挑吧 非VBA 选择要应用数据验证的单元格,然后执行以下步骤 第一步 步骤2 步骤3 步骤4 行动中 VBA 我已经对代码进行了注释,所以您在理解它时不会有任何问题
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng As Range
Dim aCell As Range
'~~> The below two lines are required. Read up more on
'~~> http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640
On Error GoTo Whoa
Application.EnableEvents = False
'~~> Set your range
Set rng = Range("C5:L14")
If Not Application.Intersect(Target, rng) Is Nothing Then
'~~> Loop through all cells in the range
For Each aCell In rng
If aCell.Value <> "" Then
If aCell.Value > Date Then
aCell.ClearContents
MsgBox "Future date not allowed in cell " & aCell.Address
ElseIf IsDate(aCell.Value) = False Then
aCell.ClearContents
MsgBox "Incorrect date in cell " & aCell.Address
Else
aCell.Value = Format(aCell.Value, "yyyy-mm")
End If
End If
Next
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
选项显式
私有子工作表_变更(ByVal目标为Excel.Range)
变暗rng As范围
Dim aCell As系列
“~~>以下两行是必需的。阅读更多关于
'~~> http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640
关于错误转到哇
Application.EnableEvents=False
“~~>设置您的范围
设置rng=范围(“C5:L14”)
如果不是Application.Intersect(Target,rng),则什么都不是
“~~>循环遍历范围内的所有单元格
对于rng中的每个aCell
如果aCell.Value为“”,则
如果aCell.Value>Date,则
aCell.ClearContents
MsgBox“单元格中不允许未来日期”&单元格地址
ElseIf IsDate(aCell.Value)=False然后
aCell.ClearContents
MsgBox“单元格中的日期不正确”&单元格地址
其他的
aCell.Value=格式(aCell.Value,“yyyy-mm”)
如果结束
如果结束
下一个
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头
希望这有帮助
编辑:
一点变化。在非VBA方法的步骤4中,我错误地键入了“yyyy mm”。将其更改为“yyyy-mm”您正在尝试的问题也可以在没有VBA的情况下解决。然而,我向你们展示了这两种方法。你挑吧 非VBA 选择要应用数据验证的单元格,然后执行以下步骤 第一步 步骤2 步骤3 步骤4 行动中 VBA 我已经对代码进行了注释,所以您在理解它时不会有任何问题
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng As Range
Dim aCell As Range
'~~> The below two lines are required. Read up more on
'~~> http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640
On Error GoTo Whoa
Application.EnableEvents = False
'~~> Set your range
Set rng = Range("C5:L14")
If Not Application.Intersect(Target, rng) Is Nothing Then
'~~> Loop through all cells in the range
For Each aCell In rng
If aCell.Value <> "" Then
If aCell.Value > Date Then
aCell.ClearContents
MsgBox "Future date not allowed in cell " & aCell.Address
ElseIf IsDate(aCell.Value) = False Then
aCell.ClearContents
MsgBox "Incorrect date in cell " & aCell.Address
Else
aCell.Value = Format(aCell.Value, "yyyy-mm")
End If
End If
Next
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
选项显式
私有子工作表_变更(ByVal目标为Excel.Range)
变暗rng As范围
Dim aCell As系列
“~~>以下两行是必需的。阅读更多关于
'~~> http://stackoverflow.com/questions/13860894/ms-excel-crashes-when-vba-code-runs/13861640#13861640
关于错误转到哇
Application.EnableEvents=False
“~~>设置您的范围
设置rng=范围(“C5:L14”)
如果不是Application.Intersect(Target,rng),则什么都不是
“~~>循环遍历范围内的所有单元格
对于rng中的每个aCell
如果aCell.Value为“”,则
如果aCell.Value>Date,则
aCell.ClearContents
MsgBox“单元格中不允许未来日期”&单元格地址
ElseIf IsDate(aCell.Value)=False然后
aCell.ClearContents
MsgBox“单元格中的日期不正确”&单元格地址
其他的
aCell.Value=格式(aCell.Value,“yyyy-mm”)
如果结束
如果结束
下一个
如果结束
让我们继续:
Application.EnableEvents=True
出口接头
哇
MsgBox错误说明
继续
端接头
希望这有帮助
编辑:
一点变化。在非VBA方法的步骤4中,我错误地键入了“yyyy mm”。将其更改为“yyyy-mm”
Set Rng=ws.Range(“C5:L14”)
也不要将Range
字用作变量,也可以将Dim Range作为工作表更改为Dim Rng as Range
顺便说一句,您不需要VBA。您可以手动设置DataValidation;)@SiddharthRout,这一切看起来都像是我的答案:)。Set Rng=ws.Range(“C5:L14”)
也不要使用Range
word作为变量,也可以更改Dim Range as Worksheet
asDim Rng as Range
顺便说一句,您不需要VBA。您可以手动设置DataValidation;)@悉达多,这一切对我来说似乎都是一个答案:)。感谢所有的回复,尝试了所有的回复,效果都比预期的好。我每天都从这个网站和你的答案中学到越来越多的东西。谢谢你的快速回复,我现在就去了解更多。关于VBA方法,我只知道一个问题,我不明白。如果我清除该范围内的任何单元格,它将使用msgbox“future dates not allowed”一次清除一个单元格来清除整个电子表格。永远不会有理由删除电子表格上的任何内容,但这困扰着我,我想了解为什么要删除未来的VBA代码。谢谢,这是我的