Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2465|回复: 14

关于筛选问题 总出错 求修改

[复制链接]
发表于 2012-5-28 21:13 | 显示全部楼层 |阅读模式
本帖最后由 willggy 于 2012-5-29 12:45 编辑

如果 调用筛选函数就出错时怎么回事  出现“用户不存在”  附件可见 考试管理系统.zip (190.12 KB, 下载次数: 4)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2012-5-28 21:14 | 显示全部楼层
做到这卡壳了  就是想一般用户进入只筛选他自己的信息(按学号) 然后把表保护
回复

使用道具 举报

 楼主| 发表于 2012-5-28 21:16 | 显示全部楼层
还有一个问题就是我用sname变量登录总会显现用户不存在 只能先给一个单元格赋值
回复

使用道具 举报

发表于 2012-5-28 21:43 | 显示全部楼层
willggy 发表于 2012-5-28 21:16
还有一个问题就是我用sname变量登录总会显现用户不存在 只能先给一个单元格赋值

你的登陆代码设置太绕了

应该尽量使用 find 而不是Vlookup
原因:vlookup找不到会报错,程序会停止
使用 find ,可以直接使用判断用户名是否存在,然后在offset(,1) 取密码就可以了

代码中你用了 Sheets("用户权限").Activate  ,这个没必要使用
原因:要 Activate 工作表,如果工作是处于隐藏状态,则会激活下一个工作表
  这点你可以拿个空表,隐藏一个工作表,然后再测试


后面的 Cells(4, 10) 其实是 Sheets("用户权限") 表中的,那么可以直接with
在不激活 用户权限 表的时候测试一下看看结果是不是,指定单元格中的内容?

  1.    with Sheets("用户权限")
  2.       msgbox .cells(4,10)
  3.     end with
复制代码



sname变量登录总会显现用户不存在
这一点主要是 vlookup 的特性,vlookup查找数据时,对数据格式的要求是很严格的!!
这也是为什么用find 比用vlookup效果好的原因之一!!


最后
想一般用户进入只筛选他自己的信息(按学号)
这点在你的附件中并没有相应的"数据账号",所以不好弄


发求助贴传附件的时候,最好取消各种密码,不然每都要输入密码,很烦人的!!




回复

使用道具 举报

 楼主| 发表于 2012-5-28 21:55 | 显示全部楼层
无聊的疯子 发表于 2012-5-28 21:43
你的登陆代码设置太绕了

应该尽量使用 find 而不是Vlookup

谢谢指点 我改改看
回复

使用道具 举报

 楼主| 发表于 2012-5-29 12:44 | 显示全部楼层
无聊的疯子 发表于 2012-5-28 21:43
你的登陆代码设置太绕了

应该尽量使用 find 而不是Vlookup

代码以改  但是筛选还是不好用 每次筛选都是从用户权限表里筛选 而不是原数据表  密码已取消 附件在一楼Private Sub CommandButton1_Click()
Dim rng1 As Range
Dim rng2 As Range

With Sheets("用户权限").Range("B4:B100")
'On Error GoTo error '跳转处错误处理程序
Sname = ComboBox1.Text '用户名
Stext = TextBox1.Text '密码


TextBox1.Text = "" '清空文字

Set rng1 = .Find(What:=Sname, After:=.Cells(.Cells.count))
End With
If Not rng1 Is Nothing Then
    pwd = rng1.Offset(, 2)
    If (pwd = Stext) Then
    Sgarde = rng1.Offset(, 1)
        Select Case Sgarde
         Case "一般用户"
            Call shaixuan1
            Sheets("用户权限").Visible = False '隐藏用户权限表
            'Hiding '隐藏与该用户无关的信息
            Protect '保护相关工作表
         Case "高级用户"
            Sheets("用户权限").Visible = False '隐藏用户权限表
           'Protect '保护相关工作表
         Case "管理员"
        End Select
    Else
       MsgBox "密码错误,重新输入"
       Exit Sub
    End If

Else
   MsgBox "用户不存在"
   Exit Sub
End If

    UserForm3.Hide '隐藏登录界面
    Application.WindowState = xlMaximized '工作表最大化
End Sub


Private Sub shaixuan1()
Sname = ComboBox1.Text
With Sheets("原数据")
Range("A3:O4000").AutoFilter Field:=1, Criteria1:=Sname
End With
End Sub


回复

使用道具 举报

发表于 2012-5-29 15:24 | 显示全部楼层
willggy 发表于 2012-5-29 12:44
代码以改  但是筛选还是不好用 每次筛选都是从用户权限表里筛选 而不是原数据表  密码已取消 附件在一楼P ...

具体说说你的筛选是怎么用的?

工作表保护时设置参数,是否允许筛选(AllowFiltering,设置为true则允许筛选)
另外工作表保护参数中"UserInterfaceOnly",也设置为 true,该参数是在保护工作表的情况下,允许宏操作工作表

具体的你可以看 Worksheet.Protect 方法中的帮助!

打开你的工作薄,不知道你是怎么操作的,所以无法测试代码
回复

使用道具 举报

 楼主| 发表于 2012-5-29 18:49 | 显示全部楼层
无聊的疯子 发表于 2012-5-29 15:24
具体说说你的筛选是怎么用的?

工作表保护时设置参数,是否允许筛选(AllowFiltering,设置为true则允许筛 ...

你好 谢谢你的回答 我想法是 登录时若判断级别为一般用户 则对原数据表进行筛选 即对第一列进行筛选 筛选值为登录的用户名 也就是学号 按照你说的我把protect 改了 代码为
  1. Sub Protect()
  2. Dim i As Integer, book As Worksheet
  3. On Error GoTo error
  4. For Each book In ActiveWorkbook.Sheets '循环获取当前工作簿的所有工作表
  5. book.Activate '激活每个工作表
  6.     Sheets(book.Name).Protect Password:=Spwd, AllowFiltering:=True, UserInterfaceOnly:=True
  7. Next book
  8. Exit Sub
  9. error: MsgBox Err.Description, 16 '提示错误
  10. End Sub
复制代码
调试之后 仍然没有对原数据工作表筛选 而是对用户权限那个表筛选了 还一个问题就是我的用户密码只能设成字母的 要是全数字就显示密码错误。。。。
回复

使用道具 举报

发表于 2012-5-29 19:02 | 显示全部楼层
willggy 发表于 2012-5-29 18:49
你好 谢谢你的回答 我想法是 登录时若判断级别为一般用户 则对原数据表进行筛选 即对第一列进行筛选 筛选 ...

你想搞的是一般用户中,谁登陆的就只能看谁的成绩是不??

搞那么复杂,不如直接搞用户窗体,在里面显示这个人的成绩就可以了

如果照你现在这样设计的话,你需要添加 3276 个用户,还得分别给他们设置密码

第一个人看了都要关闭工作薄,然后第二个人才能看

如果直接使用一个查询窗体的话,你把密码放到 原数据 表里面,他们输入自己的 考号,在输入密码

就直接显示出他们对应的成绩了,这样不是更好吗?第二个人可以接着操作!!不用闭关工作薄!!

回复

使用道具 举报

发表于 2012-5-29 19:42 | 显示全部楼层
willggy 发表于 2012-5-29 18:49
你好 谢谢你的回答 我想法是 登录时若判断级别为一般用户 则对原数据表进行筛选 即对第一列进行筛选 筛选 ...

这是一个成绩查询的小示例!!

考试管理系统.zip (156.52 KB, 下载次数: 2)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-18 07:51 , Processed in 1.434004 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表