[原创] [分享] 在VBA中设置了密码保护,但在EXCEL中失效的问题,标题要长长长长长
时间:2011-08-03
来源:互联网
各位高手达人,
本人菜鸟一枚,写了一段背单词的简陋程序,功能如下:
点击按钮后,在输入框中依次输入第一列的内容,如果正确则进入下一个单元格,错误则提示要求重新输入。
到末尾可以自行添加新单词
后来发现选中单元格可以替代手工输入,于是设密码保护单元格,禁止选中。
问题是:在VBA中设置了密码保护,但在excle中解除保护不需要密码。
百思不得其解,只好上网求助。
源码如下:
Sub dInput()
Dim dInput As String '定义dInput 为 一个 文本输入变量
Dim r As Integer
Dim A As Integer
A = 1
r = Sheet1.Range("A65536").End(xlUp).Row '得到非空最后一行的行数
ActiveSheet.Protect (qwerty) '保护单元格,防止点击代替输入,必须手动输入,括号内是解除保护的密码
For A = 1 To r '从第一行开始,遍历所有非空行
dInput = Application.InputBox(Prompt:=Sheet1.Cells(A, 1), Type:=2) '用inputbox函数,将输入的值赋予dInput变量,其中,prompt为参数,表示取第A行,第一列的单元格内容作为提示信息
If dInput = Sheet1.Cells(A, 1) Then '判断,如果输入信息与提示信息相符,则结束if,到next A, 即是返回到for语句,进行循环
ElseIf dInput = "quit" Then '中途允许退出
GoTo x
Else
MsgBox "wrong,repeat" '如何不符,则A-1,然后循环,即是重新要求输入一遍该单元格
A = A - 1
End If
Next A
ActiveSheet.Unprotect '解除保护单元格,防止点击代替输入,必须手动输入,括号内是解除保护的密码
dInput = Application.InputBox(Prompt:="输入新值", Type:=2) '如果循环完毕,表述现有的数据都已输入一遍,需要输入新数据,因此提示输入新值。 重新赋值给dInput
Sheet1.Cells(r + 1, 1).Value = dInput '讲这次新输入的,写入第r+1行,第一列
MsgBox "ig"
ActiveSheet.Protect (qwerty) '保护单元格,为下次打开做好准备,防止点击代替输入,必须手动输入,括号内是解除保护的密码
x: MsgBox "坚持就是胜利!" '退出
End Sub
------------------------------------------------------------------------------------------------------------------------------
Private Sub password_Click() '点按钮,调用上面的函数
Call dInput
End Sub
求各位高手达人神仙妖怪指点迷津!
english learn test.rar(18.63 KB)
本人菜鸟一枚,写了一段背单词的简陋程序,功能如下:
点击按钮后,在输入框中依次输入第一列的内容,如果正确则进入下一个单元格,错误则提示要求重新输入。
到末尾可以自行添加新单词
后来发现选中单元格可以替代手工输入,于是设密码保护单元格,禁止选中。
问题是:在VBA中设置了密码保护,但在excle中解除保护不需要密码。
百思不得其解,只好上网求助。
源码如下:
Sub dInput()
Dim dInput As String '定义dInput 为 一个 文本输入变量
Dim r As Integer
Dim A As Integer
A = 1
r = Sheet1.Range("A65536").End(xlUp).Row '得到非空最后一行的行数
ActiveSheet.Protect (qwerty) '保护单元格,防止点击代替输入,必须手动输入,括号内是解除保护的密码
For A = 1 To r '从第一行开始,遍历所有非空行
dInput = Application.InputBox(Prompt:=Sheet1.Cells(A, 1), Type:=2) '用inputbox函数,将输入的值赋予dInput变量,其中,prompt为参数,表示取第A行,第一列的单元格内容作为提示信息
If dInput = Sheet1.Cells(A, 1) Then '判断,如果输入信息与提示信息相符,则结束if,到next A, 即是返回到for语句,进行循环
ElseIf dInput = "quit" Then '中途允许退出
GoTo x
Else
MsgBox "wrong,repeat" '如何不符,则A-1,然后循环,即是重新要求输入一遍该单元格
A = A - 1
End If
Next A
ActiveSheet.Unprotect '解除保护单元格,防止点击代替输入,必须手动输入,括号内是解除保护的密码
dInput = Application.InputBox(Prompt:="输入新值", Type:=2) '如果循环完毕,表述现有的数据都已输入一遍,需要输入新数据,因此提示输入新值。 重新赋值给dInput
Sheet1.Cells(r + 1, 1).Value = dInput '讲这次新输入的,写入第r+1行,第一列
MsgBox "ig"
ActiveSheet.Protect (qwerty) '保护单元格,为下次打开做好准备,防止点击代替输入,必须手动输入,括号内是解除保护的密码
x: MsgBox "坚持就是胜利!" '退出
End Sub
------------------------------------------------------------------------------------------------------------------------------
Private Sub password_Click() '点按钮,调用上面的函数
Call dInput
End Sub
求各位高手达人神仙妖怪指点迷津!
附件

2011-8-3 21:30, 下载次数: 2
源码
作者: SGOC 发布时间: 2011-08-03
把你保护密码的括号去掉试试看了
作者: XZ19860527 发布时间: 2011-08-03
可能上面没讲清楚
VBA程序运行没有问题,但是每次在EXCEL中,点击取消保护,不需要输入密码。
如果在excel中人工设置密码,哪怕密码和vba程序中一样,也会导致VBA程序出错,
VBA程序运行没有问题,但是每次在EXCEL中,点击取消保护,不需要输入密码。
如果在excel中人工设置密码,哪怕密码和vba程序中一样,也会导致VBA程序出错,
作者: SGOC 发布时间: 2011-08-03
我试过了,去掉密码括号,还是VBA可以运行,但在excel中可以不需要密码解锁
我看帮助中,有括号啊,。。。
我看帮助中,有括号啊,。。。
作者: SGOC 发布时间: 2011-08-03
顶顶更健康

作者: SGOC 发布时间: 2011-08-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28