Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

这两句代码的区别

不务实  发表于:2009-11-06 14:46:29  
复制

With CodeContextObject

条件语句略

End With

 

 

With Me.xxx                 
   
End With

 

Top
andymark 发表于:2009-11-06 16:55:14

对像不同

 

With XX                
   
End With

 

是一种让代码更加可读,美观,省略的写法

 


Me.Text0.BackColor = 16777215
Me.Text0.ForeColor = 16744448

 

上面的语句,我们可以简写为

 

With Me.Text0
   .BackColor = 16777215
   .ForeColor = 16744448
End With



不务实 发表于:2009-11-06 19:53:49

噢,懂了一半.

那还有一句呢?主要的是红色的在这儿作什么用

 

 

With CodeContextObject

条件语句略

End With

 



点燃一支烟 发表于:2009-11-06 20:37:46

以罗斯文示例数据库为例,见其中的宏“客户标签对话框”,你可以将该宏转化为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 型,只读



点燃一支烟 发表于:2009-11-06 20:40:02

这里的对象就是那个”预览“按钮,而这一段:

'------------------------------------------------------------
' 客户标签对话框_打印
'
'------------------------------------------------------------
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

对象就是附加给“打印”按钮



点燃一支烟 发表于:2009-11-06 20:43:58
实际上就是把里面的那个选项组的不同值附加给不同按钮,以确定按下按钮时响应选项组的不同取值条件

andymark 发表于:2009-11-06 21:30:09

With CodeContextObject

    .A=AA

    .B=BB

End With

 

你把它看作是一种缩写就行啦

 

转换成完整代码

 

CodeContextObject.A=AA

CodeContextObject.B=BB

 

注意WITH 里面带.的才是它的对象属性,并不是中间所有代码都看成是它的属性对象

 

 



点燃一支烟 发表于:2009-11-06 21:58:16

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



sosopain 发表于:2009-11-06 22:28:51

很重要的一点.这个with 不仅仅是缩写.

 

更是加快代码执行速度的重要方法.特别是针对对象的大量引用.

 

具体可以查找一下access的帮助文件.



不务实 发表于:2009-11-07 08:43:57

太热情了,好像用不用不起决定性作用,只是加强了可读性

 

 

不过我还有点搞不懂CodeContextObject这个属性是干什么的



andymark 发表于:2009-11-07 09:46:52

请多看帮助

 

 

CodeContextObject 属性

参阅参阅参阅参阅

使用 CodeContextObject 属性可以确定其中的或 Visual Basic 代码正在执行的对象。Object 型,只读。

expression.CodeContextObject

expression      必需。返回“应用于”列表中的一个对象的表达式。

设置

CodeContextObject 属性由 Microsoft Access 设置,而且在所有视图中都是只读的。

说明

Screen 对象的 ActiveControlActiveDataAccessPageActiveDatasheetActiveFormActiveReport 属性始终返回当前获得焦点的对象。带有焦点的对象既可能是也可能不是当前正在运行宏或 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 :