当用户在VBA中点击Save时如何抛出错误
在我的A列中,我有一个选项,允许用户选择“是”或“否”。两个选择都需要一个单元格当用户在VBA中点击Save时如何抛出错误,vba,excel,Vba,Excel,在我的A列中,我有一个选项,允许用户选择“是”或“否”。两个选择都需要一个单元格 Example: If User selects "YES" Mandatory cells will be in Colum A, D and E If User selects "No" Mandatory cells will be in Colum B, C and G 假设在第1行中,用户选择“是”,并在A1和E1上输入值,但他忘记在单元格D1中添加值。 在第2行中,用户选择“否”,并在B2和C2上
Example:
If User selects "YES"
Mandatory cells will be in Colum A, D and E
If User selects "No"
Mandatory cells will be in Colum B, C and G
假设在第1行中,用户选择“是”,并在A1和E1上输入值,但他忘记在单元格D1中添加值。
在第2行中,用户选择“否”,并在B2和C2上输入一个值,而忘记在单元格G2上输入一个值
当他点击save时,我想抛出一个错误,提示“输入以下单元格的值。D1,G2
我有以下代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Target As Range
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target = "YES" Then
For i = 1 To 15
If Target.Offset(0, i).Value = "" Then
MsgBox "Enter values on the mandatory cells (green)", vbCritical, ""
End If
Next i
Cancel = True
ElseIf Target = "NO" Then
For i = 16 To 30
If Target.Offset(0, i).Value = "" Then
MsgBox "Enter values on the mandatory cells (green)", vbCritical, ""
End If
Next i
Cancel = True
End If
End If
End Sub
使用工作簿beforeSave事件并相应地处理:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel as Boolean)
'your code here
End Sub
编辑OP的新代码:
您从未在代码中定义目标,因此intersect方法始终不返回任何内容(如果它确实有效的话)。我认为您混淆了工作表更改方法(其中包括“目标”范围),使用Save。当BeforeSave方法运行时,您必须定义目标是什么。我建议在特定的值范围内运行一个循环,并检查是否满足所有需要的条件。如果某些条件不符合要求,则可以向用户显示一条消息,指出缺少的数据并阻止保存。 使用工作簿beforeSave事件并相应地处理:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel as Boolean)
'your code here
End Sub
编辑OP的新代码:
您从未在代码中定义目标,因此intersect方法始终不返回任何内容(如果它确实有效的话)。我认为您混淆了工作表更改方法(其中包括“目标”范围),使用Save。当BeforeSave方法运行时,您必须定义目标是什么。我建议在特定的值范围内运行一个循环,并检查是否满足所有需要的条件。如果某些条件不符合要求,则可以向用户显示一条消息,指出缺少的数据并阻止保存。 试着用这两行中的一行。像这样抛出错误不是一个好主意,但是如果你想要这么多。。。 这是一个消息框:
msgbox "Enter a value of the following cells. D1 G2"
这是一个错误:
err.Raise 1, description:= "Enter a value of the following cells. D1 G2"
试着用这两行中的一行。像这样抛出错误不是一个好主意,但是如果你想要这么多。。。 这是一个消息框:
msgbox "Enter a value of the following cells. D1 G2"
这是一个错误:
err.Raise 1, description:= "Enter a value of the following cells. D1 G2"
我知道我会用那个,我的问题是,我怎么能看完整张表,然后得到丢失的手机地址呢value@PeterS如果知道要读取哪些单元格,则无需通读整个工作表。
如果Sheet1.Range(“D1”).Value=vbNullString或Sheet1.Range(“G2”).Value=vbNullString然后MsgBox“不,你不需要!“
@Mat'sMug我已经用我的代码更新了我的问题。你能帮我解决这个问题吗?@RGA我们不能在BeforeSave方法中使用这个目标范围吗?我应该对上面的代码做些什么来处理这个问题?@PeterS如上所述,在保存和检查你的条件时循环检查工作簿中的所有值。我知道我的问题是,如果我想用那张表,我怎么能看完整张表,然后找到丢失的手机地址呢value@PeterS如果您知道要读取的单元格,则无需通读整个工作表。如果Sheet1.Range(“D1”).Value=vbNullString或Sheet1.Range(“G2”).Value=vbNullString,则MsgBox“不,您不需要!“
@Mat'sMug我已经用我的代码更新了我的问题。你能帮我解决这个问题吗?@RGA我们不能在BeforeSave方法中使用这个目标范围吗?我应该对上面的代码做些什么来处理这个问题?@PeterS如上所述,在保存和检查你的条件时循环检查工作簿中的所有值。为什么负数是?答案中有什么不完整?不是我的反对票(我实际上是+1,因为我区分了向用户发送消息和抛出错误),但是你的答案没有向用户提供他们可以复制和粘贴的代码,而不了解他们在做什么。公平地说,它实际上没有回答OP的问题,但IMO OP的问题是“gimmeh teh codez“并没有显示出太多的研究成果。好吧,我考虑了第一条评论,因此我想添加它,而不是重复它。为什么是负号?答案中有什么不完整?不是我的反对票(我实际上是+1,因为我区分了向用户发送消息和抛出错误),但您的答案并没有向用户提供他们可以复制和粘贴的代码,而不需要了解他们在做什么。公平地说,它实际上并没有回答OP的问题,但IMO OP的问题是“gimmeh teh codez”“而且没有显示出太多的研究成果。好吧,我考虑了第一条评论,因此我想添加到它,而不是重复它。