EXCEL表格权限、非空格禁止修改的设置

发布网友

我来回答

1个回答

热心网友

先回答人第一问题

将你VBA中的:

If Target.Count > 1 Then Exit Sub

这一行删除,替换为以下代码

Dim Rng As Range, Rng1 As Range

For Each Rng In UsedRange

If Rng.Value = "" Then

Set Rng1 = Rng

Exit For

End If

Next

If Rng1 Is Nothing Then Set Rng1 = Range("A" & (UsedRange.Rows.Count + 1))

If Target.Count > 1 Or Target.Value <> "" Then

Rng1.Select

Exit Sub

End If

回答第二个问题共享保护的问题:

新增一个工作表,并命名该工作表为“密码表”,表中数据结构如下:

然后进入VBA,双击thisworkbook对象,写入以下代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Sht As Worksheet, i As Long, ShtPassword As String

For Each Sht In ThisWorkbook.Worksheets

For i = 1 To Sheets("密码表").Range("A100").End(xlUp).Row

If Sheets("密码表").Range("A" & i).Value = Sht.Name Then

ShtPassword = Sheets("密码表").Range("B" & i).Value

Sht.Protect Password:=ShtPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True

End If

Next

Next

Sheets("密码表").Visible = 0

End Sub

Private Sub Workbook_Open()

Dim Sht As Worksheet, i As Long, ShtPassword As String

For Each Sht In ThisWorkbook.Worksheets

For i = 1 To Sheets("密码表").Range("A100").End(xlUp).Row

If Sheets("密码表").Range("A" & i).Value = Sht.Name Then

ShtPassword = Sheets("密码表").Range("B" & i).Value

Sht.Protect Password:=ShtPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True

End If

Next

Next

Sheets("密码表").Visible = 0

End Sub

以上代码的功能是由管理员"密码表"中设置和修改保护密码即可,平时这个表都是被隐藏的,管理员要修改密码可以从VBA界面中把密码表显示出来再修改,也可以再写代码用来为显示和隐藏密码表,这里我就不多写了

EXCEL在每次打开和退出文件时,都会按照“密码表”中设置的密码,对每个工作表进行保护,使用人需要输入和编辑工作时,都要在菜单栏上手动去解除工作表的保护。

当然也可以写个宏命令,在使用人第一次输入或编辑工作表时,弹出一个inputbox窗口,要求其输入保护密码,密码正确就解除当前工作的密码保护

刚刚对第一个问题的代码进行了修改完成,增加了EXIT SUB语句

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com