都说office,似乎大家都知道office,甚至可以说都懂得office。真的懂嘛?

其实,我们只是用了office的1%不到的功能,

这不,扫地僧最近应公司同事的需求,帮他设计一份现有的excel表格的权限。大概实现的效果如下:

1、打开的时候,只显示默认的home-sheet,并提示请输入密码,根据不同的密码显示不同的sheet
2、vba编程入口需要口令才能进入
3、基于口令打开,再关闭excel之后,重新打开,要跟要求1的效果一样
4、跨软件打开要求实现一样的效果,比如用wps打开,如果不能输入口令,那么也不能展示其他的sheet

乍一看,不呀!

其实这里头的道道还是挺多的。

先说下我是怎么实现的吧。

1、套路一:基于vba编程

上面的功能,没得说,一定得通过vba编程,那么什么是vba,小白同学请自行百度。

直接上代码:

Private Sub Workbook_Open()On Error Resume NextDim psw$, YN$, sht As WorksheetActiveWindow.DisplayWorkbookTabs = False
Line1:psw = InputBox("请输入你的密码:", "密码输入框")If psw = "shanghai1" ThenSheet10.Visible = xlSheetVisibleSheet10.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet10" Then sht.Visible = xlSheetVeryHiddenNextElseIf psw = "shanxi2" ThenSheet11.Visible = xlSheetVisibleSheet11.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet11" Then sht.Visible = xlSheetVeryHiddenNextElseIf psw = "1234567890" ThenSheet1.Visible = xlSheetVisibleSheet1.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet1" Then sht.Visible = xlSheetVisibleNextElseYN = MsgBox("密码错误!是否重新输入?", vbYesNo)If YN = vbYes Then GoTo Line1 Else ThisWorkbook.Close 0End IfSheet1.Visible = xlSheetVisible
End Sub

上面的代码实现的功能大概如下:

1)打开页面的时候,隐藏sheet栏。同时弹出窗口,提醒请输入你的密码。

2)当输入密码shanghai1的时候:显示sheet10这个sheet,同时显示sheet1。

3)当输入密码shanxi2的时候:显示sheet11这个sheet,同时显示sheet1。

4)当输入密码1234567890的时候:显示所有sheet。

5)否则,提示密码错误!是否重新输入?,如果选择是,那么回到1),否则直接关闭sheet栏

遗留问题

乍一看,好像已经满足要求了。但是细心的人经过测试会提出一个问题:

如果我输入密码shanghai1,这个时候点击关闭,同时选择保存。然后再重新打开,会出现,sheet1和sheet10同时都显示了,如果这个时候用wps打开,发现查看sheet10的内容根本不需要密码。

2、套路2:关闭时候复位

1的遗留问题,其实只需要在关闭的时候设置复位即可,怎么做呢,更简单了,直接上代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)On Error Resume NextDim sht As WorksheetFor Each sht In WorksheetsIf sht.CodeName <> "Sheet1" Then sht.Visible = xlSheetVeryHiddenNextSheet1.Visible = xlSheetVisible
End Sub

这段代码的意思就是:在点击关闭之前,隐藏除了sheet1之外的所有sheet。

3、总结

经过上述总结大家知道怎么做了不。附上完整的vba代码:

Private Sub Workbook_Open()On Error Resume NextDim psw$, YN$, sht As WorksheetActiveWindow.DisplayWorkbookTabs = False
Line1:psw = InputBox("请输入你的密码:", "密码输入框")If psw = "shanghai1" ThenSheet10.Visible = xlSheetVisibleSheet10.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet10" Then sht.Visible = xlSheetVeryHiddenNextElseIf psw = "shanxi2" ThenSheet11.Visible = xlSheetVisibleSheet11.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet11" Then sht.Visible = xlSheetVeryHiddenNextElseIf psw = "1234567890" ThenSheet1.Visible = xlSheetVisibleSheet1.ActivateActiveWindow.DisplayWorkbookTabs = TrueFor Each sht In WorksheetsIf sht.CodeName <> "Sheet1" Then sht.Visible = xlSheetVisibleNextElseYN = MsgBox("密码错误!是否重新输入?", vbYesNo)If YN = vbYes Then GoTo Line1 Else ThisWorkbook.Close 0End IfSheet1.Visible = xlSheetVisible
End SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean)On Error Resume NextDim sht As WorksheetFor Each sht In WorksheetsIf sht.CodeName <> "Sheet1" Then sht.Visible = xlSheetVeryHiddenNextSheet1.Visible = xlSheetVisible
End Sub

扫地僧测试使用的文件下载:测试.xls

================================================================

破解篇章(20200721)

上面已经讲解了如何按需访问sheet,但是扫地僧为了安全起见对vba入口进行设置密码了,因此有些人就问我,密码多少,时间过去太久了,我也忘记了。这边分享下针对这种情况如何去暴力破解密码的方式。

1. 新建一个excel,打开vba,然后在sheet1模块里头输入如下代码:

'移除VBA编码保护
Sub MoveProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, False
End If
End Sub
'设置VBA编码保护
Sub SetProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, True
End If
End Sub
Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)
If Dir(FileName) = "" Then
Exit Function
Else
FileCopy FileName, FileName & ".bak"
End If
Dim GetData As String * 5
Open FileName For Binary As #1
Dim CMGs As Long
Dim DPBo As Long
For i = 1 To LOF(1)
Get #1, i, GetData
If GetData = "CMG=""" Then CMGs = i
If GetData = "[Host" Then DPBo = i - 2: Exit For
Next
If CMGs = 0 Then
MsgBox "请先对VBA编码设置一个保护密码...", 32, "提示"
Exit Function
End If
If Protect = False Then
Dim St As String * 2
Dim s20 As String * 1
'取得一个0D0A十六进制字串
Get #1, CMGs - 2, St
'取得一个20十六制字串
Get #1, DPBo + 16, s20
'替换加密部份机码
For i = CMGs To DPBo Step 2
Put #1, i, St
Next
'加入不配对符号
If (DPBo - CMGs) Mod 2 <> 0 Then
Put #1, DPBo + 1, s20
End If
MsgBox "文件解密成功......", 32, "提示"
Else
Dim MMs As String * 5
MMs = "DPB="""
Put #1, CMGs, MMs
MsgBox "对文件特殊加密成功......", 32, "提示"
End If
Close #1
End Function

2. 执行上面的宏。再弹窗里头选择:

3. 点击运行,这个时候就会要你去选择你要破解的excel。选择之后,静静等待,这个过程会很快,不会等很久。

4. 上面就是破解的一个过程,是不是非常简单呀。然后有时候大家在破解的过程可能会提示:“拒绝的权限”,非常有意思,哈哈,不要怀疑是破解程序不起作用。其实是你没有关闭你要破解的excel文件导致的。所以只要关闭掉你要破解的excel,然后重复下刚刚的破解步骤即可了哈。

vba编程控制excel输入不同的密码显示不同的sheet相关推荐

  1. 视频教程-EXCEL VBA编程(excel办公高手必经之路)-Office/WPS

    EXCEL VBA编程(excel办公高手必经之路) Office培训讲师,51CTO金牌讲师,从2005开始从事Office培训至今.擅长Excel.Word.PowerPoint等软件的应用,著有 ...

  2. 用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...

    本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统.系统应具有赛程定时设置,赛程时间暂停,及时刷新甲.乙双方的成绩以及赛后成绩暂存等功能. 内容包括:显示.键盘.时钟等内容设计 ...

  3. Excel输入公式计算只显示公式不出结果

    问题描述: Excel输入公式计算只显示公式不出结果 产生原因: Excel设置是显示公式,因此不会出现计算结果 也有人说是因为单元格格式为文本格式所以不出结果,但是经过本人测试,在上述公式的形式下无 ...

  4. Excel输入公式后只显示公式却不计算如何解决?

    在使用Excel函数公式的时候,您是否碰到过输入公式,按下Enter键之后,单元格仍只显示公式,而不显示计算结果. 工具/原料 Excel 教程以Excel2013为例 方法/步骤 教程以新建的电子文 ...

  5. 计算机vba函数,excel vba求平均值_求VBA编程或EXCEL公式(函数)

    最佳答案 =IF(AND(--SUBSTITUTE($C$2,MID($B4,1,1),"")=$C$2,--SUBSTITUTE($C$2,MID($B4,2,1)," ...

  6. VBA 简单破解EXCEL工作簿数字密码的功能

    代码1:无法实现破解密码 虽然加了不显示警告窗口,仍然会因为密码不对被警告 希望正确的时候显示密码 后面希望每次设置密码几位.每位密码从一个库里随机,可能效率低 Sub test_wb111()App ...

  7. 【VBA编程】excel表格中特定文字加上下划线

    效果如下: Public Sub 加下划线() Cells(7, 1) = Cells(5, 12) + Cells(6, 12) + Cells(7, 12) Dim St$, i&, j& ...

  8. 关于 Linux 输入正确账号密码显示 Sorry,that did not work的问题

    解决办法: **1.设置用户名时不要以数字开头,字母和下划线都是可以的, 2.字母设置时记得开没开大小写,在输入账号密码时大写Capslock是没用的,要"shift+字母"**( ...

  9. vba 修改access表的链接地址_神奇的VBA编程:禁止修改Excel工作表名称

    职场中经常需要将做好的Excel表格/模板发给他人或者存放在公共路径上共享使用,此时需要禁止别人更改已经设定好的工作表名称.或者某些工作簿中有公式使用了对某些工作表的外部引用,如果工作表名称发生变化, ...

最新文章

  1. 用Spring Web Flow和Terracotta搭建Web应用
  2. 机器学习基础专题:随机变量
  3. 【Java基础】Java中的char是否可以存储一个中文字符之理解字符字节以及编码集
  4. 深入Java中的位操作
  5. Maven解决静态资源过滤问题
  6. @RequestParam和@RequestBody
  7. C++for循环中i++与++i的区别
  8. 渗透测试中dns log的使用
  9. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)
  10. 微擎后台报错,关闭错误信息
  11. VC设置cookies实现文件刷下载量
  12. 动态 | AI能看懂英文,阿里巴巴夺实体发现测评全球第一
  13. 【附详细材料清单】一种不需要额外加工零件的板球结构(可修改后用于电赛板球结构)
  14. mysql读写分离ppt_MYSQL主从复制和读写分离ppt课件
  15. 八叉网的神奇明链外链技术
  16. Unity3d之AR小游戏
  17. [转]汽车ARM攒机指南
  18. 6500元都不到?战神Z8-DA5NP配置强悍,神船的性价比又回来了
  19. 网易乐商北京(电面一)
  20. mysql 1005是什么意思_mysql提示1005

热门文章

  1. 怎样检查服务器防火墙引起的端口不通问题?
  2. linux shell 批量生成文件夹
  3. 什么是VR虚拟展厅,VR虚拟展厅怎么做有什么功能?
  4. 数控计算机键面英语怎么认,数控技术常用术语中英文对照
  5. Tensorflow - from keras.layers import LeakyReLU 实例源码
  6. 商业航班使用100%普适可持续航空燃料首飞;安凡尼酒店及度假村蓄势发力大中华区市场 | 全球旅报...
  7. python使用zipfile解压文件中文乱码问题
  8. JavaScript的垃圾回收机制与内存管理
  9. 惠普服务器系统装好服务器黑屏,惠普装win7系统黑屏怎么解决_惠普装win7系统黑屏如何修复...
  10. java0606-homework