以罗斯文示例数据库为例,见其中的宏“客户标签对话框”,你可以将该宏转化为vba代码,其中有一段就是:
'------------------------------------------------------------
' 客户标签对话框_预览
'
'------------------------------------------------------------
Function 客户标签对话框_预览()
On Error GoTo 客户标签对话框_预览_Err
With CodeContextObject
' 附加到“预览”按钮。
If (.打印标签 = 1) Then
' 预览所有记录。
DoCmd.OpenReport "客户标签", acViewPreview, "", ""
End If
If (.打印标签 = 2 And IsNull(.选择国家)) Then
' 如果没有选择任何国家, 显示一条消息...
Beep
MsgBox "要预览或打印报表,您必须从列表中选取一个国家或者单击""所有国家""。", vbOKOnly, "选择国家"
' ...转到“选择国家”组合框...
DoCmd.GoToControl "选择国家"
' ...并停止宏。
Exit Function
End If
If (.打印标签 = 2) Then
' 预览所选国家的记录。
DoCmd.OpenReport "客户标签", acViewPreview, "", "[国家]=[Forms]![客户标签对话框]![选择国家]"
End If
' 关闭“客户标签对话框”窗体。
DoCmd.Close acForm, "客户标签对话框"
End With
客户标签对话框_预览_Exit:
Exit Function
客户标签对话框_预览_Err:
MsgBox Error$
Resume 客户标签对话框_预览_Exit
End Function
CodeContextObject 属性可以确定其中的宏或 Visual Basic 代码正在执行的对象。Object 型,只读
这里的对象就是那个”预览“按钮,而这一段:
'------------------------------------------------------------
' 客户标签对话框_打印
'
'------------------------------------------------------------
Function 客户标签对话框_打印()
On Error GoTo 客户标签对话框_打印_Err
With CodeContextObject
' 附加到“打印”按钮。
If (.打印标签 = 1) Then
' 打印所有记录。
DoCmd.OpenReport "客户标签", acViewNormal, "", ""
End If
If (.打印标签 = 2 And IsNull(.选择国家)) Then
' 如果没有选择任何国家, 显示一条消息...
Beep
MsgBox "要预览或打印报表,您必须从列表中选取一个国家或者单击""所有国家""。", vbOKOnly, "选择国家"
' ...转到“选择国家”组合框...
DoCmd.GoToControl "选择国家"
' ...并停止宏。
Exit Function
End If
If (.打印标签 = 2) Then
' 打印所选国家的记录。
DoCmd.OpenReport "客户标签", acViewNormal, "", "[国家]=[Forms]![客户标签对话框]![选择国家]"
End If
' 关闭“客户标签对话框”窗体。
DoCmd.Close acForm, "客户标签对话框"
End With
客户标签对话框_打印_Exit:
Exit Function
客户标签对话框_打印_Err:
MsgBox Error$
Resume 客户标签对话框_打印_Exit
End Function
对象就是附加给“打印”按钮
实际上就是把里面的那个选项组的不同值附加给不同按钮,以确定按下按钮时响应选项组的不同取值条件
With CodeContextObject
.A=AA
.B=BB
End With
你把它看作是一种缩写就行啦
转换成完整代码
CodeContextObject.A=AA
CodeContextObject.B=BB
注意WITH 里面带.的才是它的对象属性,并不是中间所有代码都看成是它的属性对象
3楼相当于,写过程代码:
Private Sub 预览_Click()
On Error GoTo 客户标签对话框_预览_Err
' 附加到“预览”按钮。
If (Me.打印标签 = 1) Then
' 预览所有记录。
DoCmd.OpenReport "客户标签", acViewPreview, "", ""
End If
If (Me.打印标签 = 2 And IsNull(Me.选择国家)) Then
' 如果没有选择任何国家, 显示一条消息...
Beep
MsgBox "要预览或打印报表,您必须从列表中选取一个国家或者单击""所有国家""。", vbOKOnly, "选择国家"
' ...转到“选择国家”组合框...
DoCmd.GoToControl "选择国家"
' ...并停止宏。
Exit Sub
End If
If (Me.打印标签 = 2) Then
' 预览所选国家的记录。
DoCmd.OpenReport "客户标签", acViewPreview, "", "[国家]=[Forms]![客户标签对话框]![选择国家]"
End If
' 关闭“客户标签对话框”窗体。
DoCmd.Close acForm, "客户标签对话框"
客户标签对话框_预览_Exit:
Exit Sub
客户标签对话框_预览_Err:
MsgBox Error$
Resume 客户标签对话框_预览_Exit
End Sub
很重要的一点.这个with 不仅仅是缩写.
更是加快代码执行速度的重要方法.特别是针对对象的大量引用.
具体可以查找一下access的帮助文件.
太热情了,好像用不用不起决定性作用,只是加强了可读性
不过我还有点搞不懂CodeContextObject这个属性是干什么的
请多看帮助
CodeContextObject 属性
使用 CodeContextObject 属性可以确定其中的宏或 Visual Basic 代码正在执行的对象。Object 型,只读。
expression.CodeContextObject
expression 必需。返回“应用于”列表中的一个对象的表达式。
设置
CodeContextObject 属性由 Microsoft Access 设置,而且在所有视图中都是只读的。
说明
Screen 对象的 ActiveControl、ActiveDataAccessPage、ActiveDatasheet、ActiveForm 和 ActiveReport 属性始终返回当前获得焦点的对象。带有焦点的对象既可能是也可能不是当前正在运行宏或 Visual Basic 代码的对象,例如 Visual Basic 代码可以执行一个隐藏窗体的 Timer 事件。
示例
以下示例中,CodeContextObject 属性在函数中用于识别发生错误的对象的名称。对象名称然后显示在消息框标题及错误信息正文中。示例中,Error 语句用在命令按钮的 click 事件中以产生错误。
Private Sub Command1_Click()
On Error GoTo Command1_Err
Error 11 ' Generate divide-by-zero error.
Exit Sub
Command1_Err:
If ErrorMessage("Command1_Click() Event", vbYesNo + _
vbInformation, Err) = vbYes Then
Exit Sub
Else
Resume
End If
End Sub
Function ErrorMessage(strText As String, intType As Integer, _
intErrVal As Integer) As Integer
Dim objCurrent As Object
Dim strMsgboxTitle As String
Set objCurrent = CodeContextObject
strMsgboxTitle = "Error in " & objCurrent.Name
strText = strText & "Error #" & intErrVal _
& " occured in " & objCurrent.Name
ErrorMessage = MsgBox(strText, intType, strMsgboxTitle)
Err = 0
End Function
总记录:10篇 页次:1/1 9 1 :