ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23084|回复: 28

[已解决] 如何强制使用宏 让打开表格的人一定要登陆才可以

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-28 21:17 | 显示全部楼层 |阅读模式
本帖最后由 龙藏于渊 于 2012-12-31 20:55 编辑

   我建立了一个登陆窗体 现在有两个问题
1,如果我在宏安全等级里 选择禁止使用宏 那么打开表格后 将 直接跳过登陆窗体 进入表格,而我想让别人打开我的表格(我的表格是放在局域网内共享的) 必须先登陆 才可以使用表格。怎么样才能让别人 不选择启用宏 就不能打开表格呢?
2,我写了代码   If ComboBox1 = "来宾" Then
            Sheets("基础信息").Visible = -2
            End If
目的是 让 用户为 来宾的 不能看到基础信息表 但是 现在运行后 即使是以来宾身份登陆表格的 仍然可以看到 基础信息表 代码错在什么地方呢
以上两个问题 请高手指教,谢谢。
上附件了: 强制使用宏.rar (30.9 KB, 下载次数: 419)
  谢谢 赵版主 百忙之中 抽出时间 给我释疑解惑 让我的问题得到解决。太感谢了!

TA的精华主题

TA的得分主题

发表于 2012-12-28 21:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
论坛搜索4.0宏表,可以实现关闭宏就关闭工作簿

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-28 21:31 | 显示全部楼层
yangyangzhifeng 发表于 2012-12-28 21:26
论坛搜索4.0宏表,可以实现关闭宏就关闭工作簿

如何实现不关闭工作簿 但是只能看到我写提示语那个工作表 比如SHEET3 如果对方不打开宏 就只显示这个工作表
然后我在工作表上写上 提示语 不然别人不知道 怎么打开我的表格 也不行啊

TA的精华主题

TA的得分主题

发表于 2012-12-28 21:35 | 显示全部楼层
VBA加密功能很脆弱:
Excel2003可以通过利用4.0宏表,不启用宏就会关闭工作簿的特点,插入一个4.0宏表达到目的,但在Excel2007、2010就无效了,不仅可以不启用宏打开工作簿,而且删除4.0宏表也很容易

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-28 21:43 | 显示全部楼层
zhaogang1960 发表于 2012-12-28 21:35
VBA加密功能很脆弱:
Excel2003可以通过利用4.0宏表,不启用宏就会关闭工作簿的特点,插入一个4.0宏表达到 ...

我以前看到过一个 不打开宏 他就隐藏了其他工作表 只留下 一个提示的表
除非选择 启用宏 进入登陆窗体 正常登陆 才能看到 别的工作表
我现在就想要实现这样的功能 至于别人删除什么的 也无所谓 反正公司也没有别人懂宏 只要别人 不启用宏 就看不到 别的工作表 就可以了 不一定要整个工作簿都关闭掉 请楼主帮我实现这个功能 谢谢了

TA的精华主题

TA的得分主题

发表于 2012-12-28 22:24 | 显示全部楼层
龙藏于渊 发表于 2012-12-28 21:43
我以前看到过一个 不打开宏 他就隐藏了其他工作表 只留下 一个提示的表
除非选择 启用宏 进入登陆窗体  ...

我也没有什么好办法
添加一个目录工作表(或叫其他),关闭工作簿时除了目录工作表外都深度隐藏起来,只有启用宏才能自动显示其他工作表:
  1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Application.CommandBars("cell").Reset
  5.     Dim sh As Worksheet
  6.     Sheets("目录").Visible = xlSheetVisible
  7.     For Each sh In Sheets
  8.         If sh.Name <> "目录" Then sh.Visible = xlSheetVeryHidden
  9.     Next
  10.     Me.Save
  11.     Application.ScreenUpdating = True
  12. End Sub

复制代码
  1. Private Sub Workbook_Open()
  2.    Application.Visible = False
  3.    用户登录.Show
  4.     Application.ScreenUpdating = False
  5.     Dim sh As Worksheet
  6.     For Each sh In Sheets
  7.         sh.Visible = xlSheetVisible
  8.     Next
  9.     Sheets("单据录入").Select
  10.     ActiveSheet.Unprotect
  11.     Application.ScreenUpdating = True
  12. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-12-28 22:25 | 显示全部楼层
请把VBA工程用密码保护起来,以免别人看到代码
请看附件
强制使用宏.rar (34.26 KB, 下载次数: 1188)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-28 22:57 | 显示全部楼层
zhaogang1960 发表于 2012-12-28 22:25
请把VBA工程用密码保护起来,以免别人看到代码
请看附件

谢谢 这个完全能达到我的目的了,不过我以来宾用户登录 还是能看到基础信息表 是怎么回事呢

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-28 22:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
密码都是123
我写的让基础信息表 隐藏起来的代码 没有报错 但是为什么没有作用呢

TA的精华主题

TA的得分主题

发表于 2012-12-28 23:12 | 显示全部楼层
龙藏于渊 发表于 2012-12-28 22:58
密码都是123
我写的让基础信息表 隐藏起来的代码 没有报错 但是为什么没有作用呢

把Workbook_Open的代码移动到登陆按钮中:
  1. Private Sub CommandButton1_Click()
  2.     Dim soundName As String
  3.     Dim sh As Worksheet
  4.     If ComboBox1.Text = "" Or TextBox1.Text = "" Then
  5.         If ComboBox1 = "" Then
  6.             MsgBox "用户名不能为空!", 48, "〖出入库系统〗-提示"
  7.             ComboBox1.SetFocus
  8.             Exit Sub
  9.         ElseIf TextBox1 = "" Then
  10.             MsgBox "密码不能为空!", 48, "〖出入库系统〗-提示"
  11.             TextBox1.SetFocus
  12.             Exit Sub
  13.         End If
  14.     Else
  15.         ARR = Sheets("基础信息").Range("M2:N" & Sheets("基础信息").Range("M65536").End(3).Row)
  16.         For I = 1 To UBound(ARR)
  17.             If ARR(I, 1) = ComboBox1 And ARR(I, 2) = TextBox1.Text Then
  18.                 MsgBox ComboBox1.Text & "您好!欢迎您使用本系统!", 64, "〖出入库系统〗-欢迎词"
  19.                 Application.Visible = True
  20.                 Sheets("单据录入").Range("J15") = ComboBox1.Text
  21.                 If ComboBox1 <> "来宾" Then
  22.                     For Each sh In Sheets
  23.                         sh.Visible = xlSheetVisible
  24.                     Next
  25.                 Else
  26.                     For Each sh In Sheets
  27.                         If sh.Name <> "基础信息" Then sh.Visible = xlSheetVisible
  28.                     Next
  29.                 End If
  30.                 Unload Me
  31.                 Exit Sub
  32.             End If
  33.         Next
  34.         
  35.    End If
  36.         MsgBox "登录密码错误,请重新输入!", 48, "〖出入库系统〗-提示"
  37.         TextBox1.Text = ""
  38.         TextBox1.SetFocus
  39. End Sub
复制代码

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 05:11 , Processed in 0.048065 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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