首页 > 其他分享 >Excel多人共享

Excel多人共享

时间:2023-06-12 11:36:45浏览次数:31  
标签:VBA Sub 代码 Excel Visible 窗体 多人 共享 权限

哈喽,大家好!在日常工作中,工作表经常会被多人编辑,为此,我们往往需要为不同的人设置不同的查看权限,以实现工作表的分级保密。下面分享一种用VBA设置权限的方法,它拥有高逼格的用户登录界面,以及完善的分级保密机制,赶紧来看看吧!

提到“多人运动”,你一定以为小编一言不合就开车。你错了!作为一个正经的Excel教程作者,小编说的多人运动,指的是同一个Excel表格经常需要由多人编辑,供多人使用。

Excel中的多人运动,往往需要赋予不同的人不同的查看权限,从而做到分级保密。简单地通过文件保护不能区分权限,而通过简单地隐藏工作表又太容易被取消,形同虚设!为此,小编深夜不睡,YY了一个VBA授权查阅套路,相信同学们看完一定会由衷叹一句:666!

 

 

 

第一步:建立权限表

 

赋予不同角色不同的查看权限是“多人运动”表格的重头戏,我们通过建立权限表来实现这一功能。从权限表第三行开始,我们需要将工作簿中的所有工作表名称依次填写;而从第二列开始的每一列,则用于填写每个角色的用户名、密码和对应的权限(用是否表示)。由此,我们可以自由添加工作表和查看角色,不受初始设置的限制。详见下表。

 

 

 

PS:建立权限表后,我们需要将文件保存为启用宏的工作簿,文件类型为.xlsm。

 

 

 

 

第二步:创建窗体

 

通过窗体验证用户权限是“多人运动”表格的门面,它让这套表的逼格瞬间提升了好几个档次有木有。如此装逼必备老少皆宜的窗体,该如何创建呢?

 

1. 按Alt+F11,或者点击开发工具中的Visual Basic按钮,打开VBA窗口。

 

2. 点击【插入】–【用户窗体】,在弹出的界面中绘制两个标签,分别为用户名和密码,同时插入两个文本框和两个命令按钮(取消和确定)。具体插入方式和Excel工作表中插入形状无异,此处不再赘述。

 

 

 

第三步:按钮代码

 

VBA代码是这套“多人运动”表格的灵魂,表格之所以能够实现酷炫的分权功能,全在于这寥寥数语!所以,拿走不谢!

具体操作如下:

1. 双击窗体中的“确定”按钮,将下述代码粘贴到VBA代码窗口中即可。该段代码可以实现单击“确定”按钮,即启动校验用户密码并将对应的表格显示出来的功能。

Private Sub CommandButton1_Click()

Dim j, i As Integer

maxr = Application.CountA(Sheets("权限表").Range("A:A"))

maxc = Application.CountA(Sheets("权限表").Range("1:1"))

If TextBox1.Value = "" Then MsgBox "用户名不能为空", vbInformation, "注意": Exit Sub

If TextBox2.Value = "" Then MsgBox "密码名不能为空", vbInformation, "注意": Exit Sub

For i = 2 To maxc

u = Worksheets("权限表").Cells(1, i)

k = Worksheets("权限表").Cells(2, i)

If TextBox1.Text = u And TextBox2.Text = k Then

Unload Me

Application.Visible = True

Application.EnableCancelKey = xlInterrupt

For j = maxr to 3 step -1

ThisWorkbook.Activate

If Sheets("权限表").Cells(j, i) = "是" Then

Sheets(j - 2).Visible = xlSheetVisible

Else

Sheets(j - 2).Visible = xlSheetVeryHidden

End If

Next j

If Sheets("权限表").Visible = xlSheetVisible Then

pw = "excelinexcel"

Sheets("权限表").Unprotect Password = pw

Cells.Select

Selection.EntireColumn.Hidden = False

End If

Exit Sub

End If

Next i

MsgBox "用户名或密码错误!"

End Sub

2.双击窗体中的“取消”按钮,同样粘贴下述VBA代码。该段代码功能很简单,即退出Excel。

Private Sub CommandButton2_Click()

Application.DisplayAlerts = False

Unload Me

Application.Visible = True

Application.Quit

Application.EnableEvents = False

End Sub

 

3. 在两段代码的下方,粘贴以下VBA代码,用于防止用户通过关闭窗体入侵。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode <> 1 Then Cancel = True

End Sub

 

4. 双击对象窗口中的ThisWorkbook,将下方代码粘贴到代码窗口中去。这两段代码实现了打开工作簿即弹出窗体开始验证,并保护和隐藏工作表行列,避免用户通过禁用宏来越权查看。

工作簿打开事件代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False

Sheets(1).Visible = xlSheetVisible

Dim sht As Worksheet

For Each sht In Worksheets

If sht.Name <> "权限表" Then

sht.Visible = xlSheetVeryHidden

Else

sht.Select

Cells.EntireColumn.Hidden = True

pw = "excelinexcel"

sht.Protect Password = pw

sht.EnableSelection = xlNoSelection

End If

Next

Application.Visible = False

ThisWorkbook.Close savechanges:=True

End Sub

 

工作簿关闭事件代码

Private Sub Workbook_Open()

Application.DisplayAlerts = False

Application.EnableCancelKey = xlDisabled

Application.Visible = False

UserForm1.Show

End Sub

 

5. 保护VBA工程,确保用户无法删除、查看或修改。

操作步骤:

点击【工具】-【VBAProject属性】,弹出【VBAProject-工程属性】对话框,选择【保护】选项卡,输入【查看工程属性的密码】,点击【确定】即可。

 

 

 

完成以上操作步骤,一套完美的多人运动表格就搞定了,车也就开完了。此时关闭Excel再次打开即可体验多人运动的快感,随文附上演示作品,快拿去把玩把玩吧!最后,以一段打油诗结束今天的分享,下次再见吧!

 

多人运动有是非,

一不小心就被黑。

学它几句VBA,

再也不怕把锅背。



标签:VBA,Sub,代码,Excel,Visible,窗体,多人,共享,权限
From: https://blog.51cto.com/u_14347868/6460959

相关文章

  • Excel制作三级下拉菜单
    Excel中的数据有效性(数据验证)大家并不陌生,今天我们就来说说Excel中利用数据验证和名称管理器制作多级下拉菜单!一级下拉菜单一级下拉菜单比较简单,直接利用数据验证功能即可实现,如下图中,在A列实现下拉展示大区,选中A列单元格,依次选择【数据】—【数据验证】—验证条件选择"序列"—来源......
  • Excel构建多级下拉菜单
     编按:哈喽,大家好!说到做下拉菜单,小伙伴们都知道直接使用Excel中的数据验证就可以实现,但是二级、三级,甚至更多级的下拉菜单,可能就有点蒙圈了。其实用Excel制作三级下拉菜单,一点都不难,它就跟我们平时复制粘贴一样简单!不相信?一起来看看文章,你就知道了!****************使用数据有效性制作下拉菜单对大多......
  • 前端点击一个excel图标, 自动调用office打开其对应的excel文件
    有对应的excel协议,具体:前端掉excel协议+文件地址即可,你只需要把文件地址返回即可. 背景:http协议:http"//www.baidu.comhttps协议ftp协议所以,对应的有Excel协议......
  • 再也不用担心组件跨层级的数据共享和方法驱动了
    @目录兄弟组件的传值和方法调用多个独立组件的数据共享和方法调用多个组件内的方法和数据互相驱动:eventBus多个组件的数据共享以及数据修改:vuex项目中关于组件的使用经常会碰到这种情况:父子组件传和方法调用、兄弟组件的传值和方法调用、多个独立组件的数据共享和方法调用,例如:a、......
  • pandas读取excel表格内容后重新生成表格时因为序号再次生成,出现:Unnamed: 0
    出现的问题如下图:在读取数据的函数中增加:index_col=0,即可。......
  • 盘点一个Python自动化办公过程中Excel数据为空的处理
    大家好,我是皮皮。一、前言前几天在Python群,粉丝问了一个Python自动化办公的问题,这里拿出来给大家分享下。这个问题相信很多人都会遇到,原始Excel数据中,这个【编号】列一般是有相关数据的,但是如果没有的话,就先写为“暂无编号”,如下图所示:后来发现通过Python代码,将其写入到word文件,不......
  • 看看Angular有啥新玩法!手把手教你在Angular15中集成Excel报表插件
    Angular15新特性Angular框架(以下简称“Angular”)作为一款由谷歌开发的Web应用程序框架,其强大的依赖注入系统、可重复使用的模块化开发理念和响应式编程模式等特点让Angular一问世便取得了巨大的关注和流量。截止目前为止,Angular已经迭代了15个版本,而Angular15又有哪些新的亮眼表现......
  • Python操作Excel文件中多WorkSheet模拟数据库内连接查询
    严格意义上来讲,是可以把Excel文件看作数据库的,C#通过OLEDB.net就可以使用SQL语句操作Excel文件中的数据。本文代码使用Python扩展库openpyxl操作Excel文件中多个WorkSheet中的数据,模拟了数据库的内连接。假设Excel文件名为data.xlsx,其中第一个WorkSheet数据如下:第二个WorkSheet数据......
  • 使用Python获取Excel文件中单元格公式的计算结果
    假设有如下Excel文件,其中第二个WorkSheet中数据如下:其中D列为公式,现在要求输出该列公式计算的数值结果,代码如下:代码运行结果:......
  • Python多进程使用队列共享数据协同判断素数
    感谢江西师范大学李雪斌老师提供素材和第一版本代码。问题描述:创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数则存入qOut。技术要点:1)使用Python标准库multiprocessing创建和管理......