ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12108|回复: 19

[求助]批量设置、解除所有选定文档的“打开文件时的密码”

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-5-27 00:26 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如何批量设置指定文件夹下的所有选定文档的“打开文件时的密码”,即输入正确密码后方能打开文档?
[此贴子已经被作者于2008-5-30 21:08:44编辑过]

TA的精华主题

TA的得分主题

发表于 2008-5-27 07:03 | 显示全部楼层

简单地示范了一个,供楼主参考 :

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-5-27 7:02:36
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0407^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Sub SAMPLE()
    Dim myDialog As FileDialog, oFile As Variant, oDoc As Document
    Dim NewFolder As String
    On Error Resume Next
    NewFolder = "F:\TEMP\"
    '
定义一个文件夹选取对话框

    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '
清除所有文件筛选器中的项目
        .Filters.Add "
所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '
允许多项选择
        If .Show <> -1 Then Exit Sub
        For Each oFile In .SelectedItems    '
在所有选取项目中循环
            Set oDoc = Documents.Open(FileName:=oFile, Visible:=False)
            With oDoc
                .Password = "
你的密码"
                .Close True   '
关闭文档

            End With
        Next oFile
    End With
End Sub
'----------------------



TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-27 09:33 | 显示全部楼层

谢谢守版,想再次请教一下:

代码  On Error Resume Next'忽略错误,在什么时候要用到这句代码?

代码 NewFolder = "F:\TEMP\"有什么具体用途?感觉去掉这句对代码的执行没有影响

代码.Filters.Add "所有 WORD 文件", "*.doc", 1   中的1表示什么?
代码 If .Show <> -1 Then Exit Sub是否表示如果不是点击“确定”(即点击“取消”)则退出?

TA的精华主题

TA的得分主题

发表于 2008-5-27 09:44 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2008-5-27 9:33:15的发言:

谢谢守版,想再次请教一下:

代码  On Error Resume Next'忽略错误,在什么时候要用到这句代码?

代码 NewFolder = "F:\TEMP\"有什么具体用途?感觉去掉这句对代码的执行没有影响

代码.Filters.Add "所有 WORD 文件", "*.doc", 1   中的1表示什么?
代码 If .Show <> -1 Then Exit Sub是否表示如果不是点击“确定”(即点击“取消”)则退出?

不在可预测错误或者出现的错误不足以影响程序的进行时,可以使用On Error Resume Next'忽略错误,它的意思是总是程序将从出错代码行的下一行代码开始继续运行。

比如,如果我们打开一个设置有打开密码的文档时,如果在OPEN方法后使用PasswordDocument 参数指定为""(什么也没有时),将会发生一个错误,即密码不正确,这时,你又希望对已有打开密码的文档不予处理的话,显然正合适。

有关错误处理的专题贴子,请搜索一下我的主题贴。

On Error有三四种用法。

NewFolder = "F:\TEMP\"

这句代码实际没有用,因为我从我的另一个贴子中COPY而来,如果你希望将设置打开文档密码的文档另存为一个文件时,可能需要使用一个新的路径,这时,它可以派用场。

.Filters.Add "所有 WORD 文件", "*.doc", 1   中的1表示什么?它表示文件筛选器的默认选项,就象我们在WORD中使用CTRL+O打开“打开”对话框时,其中的文件类型的默认列表项目,1 表示为第一项,以此类推。

If .Show <> -1 Then Exit Sub是否表示如果不是点击“确定”(即点击“取消”)则退出?
是的,有关show方法(DIALOG/FILEDIALOG对象)请参考VBA帮助文件。

很高兴看到清福兄在走近VBA,想当初上论坛的第一个贴(好象是英语练习薄中的画线??),看到VBA就晕了。

将代码复制到VBE中,对不懂的关键字选中它,按下F1,你将学会更多。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-27 10:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

没想到守版的记性这什么好,好久以前的事都还记得!我现在也是在VBE中通过按F1和F8慢慢学习代码,谢谢守版的再次回复,学习中……

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-27 20:09 | 显示全部楼层

又来麻烦守版:

对于上述指定文件夹下指所有选定文档批量设置的“打开文件时的密码”,又该如何批量解除呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-28 10:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

继6楼问题,再问守版两个问题:

Q1:在如何批量设置所有选定文档的“打开文件时的密码”里,如何做到密码设置是动态的,即每次设置的密码均可改变,就像在Inputbox框设置那样,而不老是使用同一个密码,增强安全性(密码由在inputbox中所填的内容变化而变化)?

Q2:能否像“批量设置(解除)指定文件夹下的所选文档(文档)保护”那样,将“批量设置指定文件夹下的所选文档的‘打开文件时的密码‘”和“批量解除指定文件夹下的所选文档的‘打开文件时的密码‘”的代码组合在一起?

[此贴子已经被作者于2008-5-30 7:37:55编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-5-30 07:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
自已顶一下,期待守版帮忙解决6楼和7楼的问题……

TA的精华主题

TA的得分主题

发表于 2008-5-30 18:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用tangqingfu在2008-5-27 20:09:17的发言:

又来麻烦守版:

对于上述指定文件夹下指所有选定文档批量设置的“打开文件时的密码”,又该如何批量解除呢?

请参考:

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-5-30 18:03:52
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0412^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Option Explicit
Sub Example()
'
批量解除打开文档密码

    Dim myDialog As FileDialog, oFile As Variant, oDoc As Document
    Dim myPassWord As String
    '    On Error Resume Next
    myPassWord = "tangqingfu"
    '
定义一个文件夹选取对话框
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '
清除所有文件筛选器中的项目
        .Filters.Add "
所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '
允许多项选择
        If .Show <> -1 Then Exit Sub
        For Each oFile In .SelectedItems    '
在所有选取项目中循环
            Set oDoc = Documents.Open(FileName:=oFile, Visible:=False, PasswordDocument:=myPassWord)
            With oDoc
                .ReadOnlyRecommended = False '
请勿省略
                .Password = ""
                .Save
                .Close    '
关闭文档
            End With
        Next oFile
    End With
End Sub
'----------------------



TA的精华主题

TA的得分主题

发表于 2008-5-30 18:33 | 显示全部楼层
QUOTE:
以下是引用tangqingfu在2008-5-28 10:21:35的发言:

继6楼问题,再问守版两个问题:

Q1:在如何批量设置所有选定文档的“打开文件时的密码”里,如何做到密码设置是动态的,即每次设置的密码均可改变,就像在Inputbox框设置那样,而不老是使用同一个密码,增强安全性(密码由在inputbox中所填的内容变化而变化)?

Q2:能否像“批量设置(解除)指定文件夹下的所选文档(文档)保护”那样,将“批量设置指定文件夹下的所选文档的‘打开文件时的密码‘”和“批量解除指定文件夹下的所选文档的‘打开文件时的密码‘”的代码组合在一起?


这段代码不太好理解,请楼主先测试一下:

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-5-30 18:32:23
'仅测试于System: Windows NT Word: 11.0 Language: 2052
'№ 0413^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------
Option Explicit
Sub Example()
'批量解除打开文档密码
    Dim myDialog As FileDialog, oFile As Variant, oDoc As Document
    Dim myPassWord As String
    Dim OldPW As String
    Dim myVar As Variable
    Dim aVar As Variable
    Dim Num As Integer
    On Error Resume Next
    '定义一个文件夹选取对话框
    Set myDialog = Application.FileDialog(msoFileDialogFilePicker)
    With myDialog
        .Filters.Clear    '清除所有文件筛选器中的项目
        .Filters.Add "所有 WORD 文件", "*.doc", 1    '增加筛选器的项目为所有WORD文件
        .AllowMultiSelect = True    '允许多项选择
        If .Show <> -1 Then Exit Sub
        With ThisDocument
            For Each aVar In .Variables
                If aVar.Name = "PW" Then Set myVar = aVar: Exit For
            Next
            If myVar Is Nothing Then
                Set myVar = .Variables.Add(Name:="PW", Value:="EMPTY")
            End If
            OldPW = myVar.Value
            If OldPW = "EMPTY" Then OldPW = ""
            myPassWord = VBA.InputBox("请输入需要设置的文档保护密码,如果什么也不输入或者按取消则视为解除打开密码!")
            If myPassWord = "" Then
                .Variables("PW").Value = "EMPTY"
            Else
                .Variables("PW").Value = myPassWord
            End If
            .Save
        End With
        For Each oFile In .SelectedItems    '在所有选取项目中循环
            Set oDoc = Documents.Open(FileName:=oFile, Visible:=False, PasswordDocument:=OldPW)
            With oDoc
                .ReadOnlyRecommended = False    '请勿省略
                .Password = myPassWord
                .Close True   '关闭文档
            End With
        Next oFile
    End With
End Sub
'----------------------


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 09:23 , Processed in 0.050023 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表