Ms access MS Access 2010 VBA多个其他如果问题
我有一个MS Access表单,用户最多可以选择四个条件来过滤报告返回的记录。在VBA中,我尝试根据用户选择的筛选依据字段(如果有)动态构建筛选字符串。下面的代码给了我一个“Block If With End If”错误。我做错了什么Ms access MS Access 2010 VBA多个其他如果问题,ms-access,vba,if-statement,Ms Access,Vba,If Statement,我有一个MS Access表单,用户最多可以选择四个条件来过滤报告返回的记录。在VBA中,我尝试根据用户选择的筛选依据字段(如果有)动态构建筛选字符串。下面的代码给了我一个“Block If With End If”错误。我做错了什么 If (IsNull(frm!employee) = False) Then strFilter = "Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee &
If (IsNull(frm!employee) = False) Then
strFilter = "Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
Else
If (IsNull(frm!sop) = False) Then
strFilter = "sop_number = '" & frm!sop & "'"
If (IsNull(frm!employee) = False) Then
strFilter = "Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
Else
If (IsNull(frm!revision) = False) Then
strFilter = "revision_number = '" & frm!revision & "'"
If (IsNull(frm!employee) = False) Then
strFilter = " AND Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
Else
If IsNull(frm!dept) = False Then
strFilter = "department = '" & frm!dept & "'"
If (IsNull(frm!employee) = False) Then
strFilter = " AND Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
End If
如果您能给我任何改进此代码的建议,我将不胜感激。问题是您的
其他。。。if
子句未以结束if
终止。您需要使用ElseIf
或
Else
If ...
End If
Else...
我在下面修改了您的代码以使用后一种语法。请注意下面的结束If行
注意:您不需要**,这只是为了在代码块中引起注意强>
If (IsNull(frm!employee) = False) Then
strFilter = "Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
Else
If (IsNull(frm!sop) = False) Then
strFilter = "sop_number = '" & frm!sop & "'"
If (IsNull(frm!employee) = False) Then
strFilter = "Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
**End If**
Else
If (IsNull(frm!revision) = False) Then
strFilter = "revision_number = '" & frm!revision & "'"
If (IsNull(frm!employee) = False) Then
strFilter = " AND Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!dept) = False Then
strFilter = strFilter + " AND department = '" & frm!dept & "'"
End If
**End If**
Else
If IsNull(frm!dept) = False Then
strFilter = "department = '" & frm!dept & "'"
If (IsNull(frm!employee) = False) Then
strFilter = " AND Trainee_First_Name + ' ' + Trainee_Last_Name = '" & frm!employee & "'"
End If
If IsNull(frm!sop) = False Then
strFilter = strFilter + " AND sop_number = '" & frm!sop & "'"""
End If
If IsNull(frm!revision) = False Then
strFilter = strFilter + " AND revision_number = '" & frm!revision & "'"
End If
**End If**
End If
该代码避免在strFilter开头使用“AND”。然而,这种逻辑很难遵循,它在相同的基本主题上使用了多种变体
使用更简单的方法。您对4个表单控件中包含的值感兴趣:
frm!员工
frm!sop
frm!修订版
frm!部门
strFilter
。之后,如果strFilter包含任何文本,您知道它以“AND”开头,因此您可以简单地丢弃前5个字符
strFilter=vbNullString“0”
strFilter=strFilter&_
“和受训者的名字&”“和受训者的姓&”_
frm!雇员&“”
如果结束
如果Len(Trim(frm!sop)&vbNullString)>0,则
strFilter=strFilter&“和sop_编号=”&frm!sop&“'”
如果结束
如果Len(Trim(frm!Revision)&vbNullString)>0,则
strFilter=strFilter&“和修订号='”&_
frm!修订版&“”
如果结束
如果Len(Trim(frm!dept)&vbNullString)>0,则
strFilter=strFilter&“部门=”&frm!部门&“”
如果结束
如果Len(strFilter)>0,则
从字符串开头的“discard”和“discard”
strFilter=Mid(strFilter,6)
如果结束
MsgBox“strFilter->”和strFilter&“我在Office 2010上使用它,没有任何问题。谢谢,蒂姆。我对你的答案投了更高的票,因为你帮助他理解了问题中的语句阻塞,我认为这是一件好事。两个答案在我看来都很有用。