Public Function SysRight(strFrmName As String, frmName As Form)
On Error Resume Next    Dim Right  As String    '如果“系统窗体”表中没有记录,则结束函数,以默认管理员权限打开窗体
    If IsNull(DLookup("窗体名", "系统窗体", "窗体名='" & strFrmName & "'")) Then
        DoCmd.OpenForm strFrmName
    Else
        '否则从“权限查询”中读取权限
        Right = DLookup("权限", "权限查询", "窗体名 = '" & strFrmName & "' and 用户名='" & UserName & "'")
    End If    '如果权限为“无权”,则不打开窗体,弹出提示对话框
    If Right = "无权" Then
        DoCmd.CancelEvent
        MsgBox "对不起,您无权使用" & "“" & strFrmName & "”功能。" & Chr(10) & Chr(10) & _
               "要获得权限,请与管理员联系。", vbCritical, "无权使用"        '如果权限为“只读”,不允许编辑
    ElseIf Right = "只读" Then
        DoCmd.OpenForm strFrmName
        frmName.RecordsetType = 2        '如果权限为“只录”,可以添加新记录,但不能编辑现有记录
    ElseIf Right = "只录" Then
        DoCmd.OpenForm strFrmName
        frmName.AllowEdits = False
        
        '如果权限为“读写”,可以读写记录,但不能删除记录
    ElseIf Right = "读写" Then
        DoCmd.OpenForm strFrmName
        frmName.AllowDeletions = False
        
        '如果权限为“不限”,则以管理员权限打开窗体
    ElseIf Right = "不限" Then
        DoCmd.OpenForm strFrmName
    End IfEnd Function
我用图片做下一窗体的按钮,在图片单击事件里写上这样的
Private Sub Image3_Click()
SysRight Me.Name, Me
On Error GoTo Err_Image3_Click    Dim stDocName As String
    Dim stLinkCriteria As String    stDocName = ChrW(70) & ChrW(95) & ChrW(27983) & ChrW(-30264) & ChrW(-29776) & ChrW(20107)
    DoCmd.OpenForm stDocName, , , stLinkCriteriaExit_Image3_Click:
    Exit SubErr_Image3_Click:
    MsgBox err.Description
    Resume Exit_Image3_Click
End Sub
起初在自己电脑上没什么问题,换来个电脑,就说我无效使用NULL,可是权限查询里无空值啊,我很不明白,望高手指点

解决方案 »

  1.   

    先把你的标识符 Right 换成别的吧!干嘛非要用 VBA 的内部函数名称作标识符呢!
      

  2.   

    楼主,你能确定出错的地方一定是在你贴出来的代码段中么?你用了:On Error Resume Next 
    为何不捕获异常呢?
      

  3.   

    可能是执行过程中,有的变量值为NULL了吧。数组最容易出现这样的问题。
      

  4.   

    错误可能出现在DLookup中,请屏蔽函数SysRight和DLookup中的错误处理,然后仔细断点检查
    "无效使用NULL"很有可能是执行上面这句时出现的,不一定就是权限查询
      

  5.   

    有没有熟悉 AutoCAD VBA 二次开发的朋友呀?可以接活,赚外快呀? 
    纵梁冲系统软件发包说明 
    1、首先是根据目前市场现有的软件,比对照做。 
    2、此软件是AUTOCAD的扩展菜单。 
    3、完成CAD图纸的参数读取。 
    4、完成图纸的合理性判断。 
    5、完成一般参数的录入 
    6、完成给定格式的文件输出。 
    7、实际就是CAD的二次开发工作。 
    备注:报酬可以商量。 联系方式发送到[email protected] 谢谢。