发布网友
共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语句