excel中的第二个if语句中不输入循环
一分钟前我解决了一个关于UT的小问题,但现在我的宏上有另一个问题:excel中的第二个if语句中不输入循环,excel,if-statement,excel-2010,vba,Excel,If Statement,Excel 2010,Vba,一分钟前我解决了一个关于UT的小问题,但现在我的宏上有另一个问题: Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim S1 As String, S2 As String Dim S3 As String, S4 As String Dim lRow As Long, i As Long Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("She
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim S1 As String, S2 As String
Dim S3 As String, S4 As String
Dim lRow As Long, i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
S1 = "Football"
S2 = "Basket"
S3 = "Sport1"
S4 = "Sport2"
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lRow
If Len(Trim(.Range("E" & i).Value)) = 0 Then
Select Case .Range("C" & i).Value
Case S1, S2
MsgBox "Insert value in the cell " & _
.Range("E" & i).Address
Cancel = True
Exit For
End Select
End If
If (Len(Trim(.Range("F" & i).Value)) = 0) Or _
(Len(Trim(.Range("G" & i).Value)) = 0) Or _
(Len(Trim(.Range("H" & i).Value)) = 0) Then
Select Case .Range("C" & i).Value
Case S3, S4
MsgBox "Insert value in the cell " & _
.Range("F" & i).Address, _
.Range("G" & i).Address, _
.Range("H" & i).Address
Cancel = True
Exit For
End Select
End If
Next i
End With
End Sub
第一个if有效,但第二个if有效
If (Len(Trim(.Range("F" & i).Value)) = 0) Or _
(Len(Trim(.Range("G" & i).Value)) = 0) Or _
(Len(Trim(.Range("H" & i).Value)) = 0) Then
Select Case .Range("C" & i).Value
Case S3, S4
MsgBox "Insert value in the cell " & _
.Range("F" & i).Address, _
.Range("G" & i).Address, _
.Range("H" & i).Address
Cancel = True
Exit For
End Select
End If
没有。有什么不对劲吗
正如您所看到的,情况是相同的,但在不同的列中如果第一个If有效,那么第二个将无效,因为我们正在退出FOR循环
这就是你未经测试的尝试吗
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim S1 As String, S2 As String
Dim S3 As String, S4 As String, sMsg As String
Dim lRow As Long, i As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
S1 = "Football": S2 = "Basket": S3 = "Sport1": S4 = "Sport2"
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lRow
If Len(Trim(.Range("E" & i).Value)) = 0 Then
Select Case .Range("C" & i).Value
Case S1, S2
sMsg = .Range("E" & i).Address
End Select
End If
If (Len(Trim(.Range("F" & i).Value)) = 0) Or _
(Len(Trim(.Range("G" & i).Value)) = 0) Or _
(Len(Trim(.Range("H" & i).Value)) = 0) Then
Select Case .Range("C" & i).Value
Case S3, S4
If sMsg = "" Then
sMsg = .Range("F" & i).Address & " OR " & _
.Range("G" & i).Address & " OR " & _
.Range("H" & i).Address
Else
sMsg = sMsg & " OR " & _
.Range("F" & i).Address & " OR " & _
.Range("G" & i).Address & " OR " & _
.Range("H" & i).Address
End If
End Select
End If
If sMsg <> "" Then
MsgBox "One or all these cells are empty. " & _
"Please insert value in the cell(s) " & _
sMsg
Cancel = True
Exit For
End If
Next i
End With
End Sub
评论的后续行动
未经测试
这会将相关单元格存储在一个范围内,然后在激活相关工作表后简单地选择它。但是我不推荐这种方法。或者你也可以给细胞着色。。。通过代码或通过条件格式
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim S1 As String, S2 As String
Dim S3 As String, S4 As String, sMsg As String
Dim lRow As Long, i As Long
Dim ws As Worksheet
Dim rng As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
S1 = "Football": S2 = "Basket": S3 = "Sport1": S4 = "Sport2"
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lRow
If Len(Trim(.Range("E" & i).Value)) = 0 Then
Select Case .Range("C" & i).Value
Case S1, S2
sMsg = .Range("E" & i).Address
Set rng = .Range("E" & i)
End Select
End If
If (Len(Trim(.Range("F" & i).Value)) = 0) Or _
(Len(Trim(.Range("G" & i).Value)) = 0) Or _
(Len(Trim(.Range("H" & i).Value)) = 0) Then
Select Case .Range("C" & i).Value
Case S3, S4
If sMsg = "" Then
sMsg = .Range("F" & i).Address & " OR " & _
.Range("G" & i).Address & " OR " & _
.Range("H" & i).Address
Else
sMsg = sMsg & " OR " & _
.Range("F" & i).Address & " OR " & _
.Range("G" & i).Address & " OR " & _
.Range("H" & i).Address
End If
If rng Is Nothing Then
Set rng = .Range("F" & i & ":H" & i)
Else
Set rng = Union(rng, .Range("F" & i & ":H" & i))
End If
End Select
End If
If sMsg <> "" Then
MsgBox "One or all these cells are empty. " & _
"Please insert value in the cell(s) " & _
sMsg
If Not rng Is Nothing Then
.Activate
rng.Select
End If
Cancel = True
Exit For
End If
Next i
End With
End Sub
我觉得,我浪费了我的时间为你提供了一个详细的答案:我在你回答我之前打开的这个任务:你的回答在另一个任务中是完美的。如果你将这些建议应用到这个代码并更新你的问题,我准备帮助你。我已经编辑了我的任务。。我以前错了。。我有不同的专栏。但情况是一样的。我不知道现在怎么了。有没有办法在空牢房里对焦?我的意思是,例如,我得到MsgBox一个或所有这些单元格都是空的,并且单元格的坐标。当我单击“确定”时,是否有办法直接将我带进单元格?我不知道你是否跟着我:是的。虽然我不推荐。将所有地址存储在一个范围对象中,然后进行Rng。选择可以显示给我吗?抱歉,这是我第一次使用vba。你为什么不推荐呢?这就是我不推荐它的原因。让我看看我是否可以修改上面的代码来显示如何选择单元格…更新了上面的帖子