ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量给WORD文档添加身份证号后6位为打开文件密码?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-3 11:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 batmanbbs 于 2023-6-3 11:24 编辑

文档我已经用WORD打开后保存了一下。
1.gif

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-4 16:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

如果是word宏程序,该如何编程呢?

TA的精华主题

TA的得分主题

发表于 2023-6-4 18:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wdpfox 发表于 2023-6-4 16:52
如果是word宏程序,该如何编程呢?

这个不就是宏吗?你的意思是不是想弄一个按钮,点击后直接执行代码?

TA的精华主题

TA的得分主题

发表于 2023-6-4 21:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师,你编的宏秸序放在excel中,还是word文档中,我的意思是word宏,批骨打开word文档,根据文档名,查找Excel文档中的同名对应的18位身份证号,再以后六位设为word密码

TA的精华主题

TA的得分主题

发表于 2023-6-4 21:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
根据你的要求,其实放在EXCEL更加适合,因为如果放在WORD文档中的话,你准备放在那个文档中呢,一个空白文档?
当然,如果放在WORD中也可以,开头读取EXCEL的数据的那部分,改成按照后面WORD初始定义的方式,打开EXCEL文档,除了对象不同外,基本没有什么区别。

TA的精华主题

TA的得分主题

发表于 2023-6-5 01:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wdpfox 发表于 2023-6-4 21:02
老师,你编的宏秸序放在excel中,还是word文档中,我的意思是word宏,批骨打开word文档,根据文档名,查找E ...
  1. Sub 批量设置WORD文档密码()
  2. '
  3. ' 批量设置WORD文档密码(WORD版)
  4. ' 1.加密表确保A列为姓名(WORD文档名,不得重名),B列为密码
  5. ' 2.姓名和密码前后有空格会被删除,中间空格不会被删除
  6. ' 3.WORD文档和EXCEL加密表在同一目录下
  7. '
  8.     Dim FileName$, PassWord$, Count%, i%
  9.     Dim xlApp, xlwb As Object
  10.     Dim Dict As Object, Key$, Msg$
  11.     Dim myDoc As Document, File As Variant
  12.     Const PWLen As Byte = 6        ' 密码长度(可根据实际修改)

  13.     With Application.FileDialog(msoFileDialogFilePicker)
  14.         .Filters.Clear
  15.         .Filters.Add "WORD文档", "*.doc; *.docx", 1
  16.         .AllowMultiSelect = True
  17.         If .Show <> -1 Then End
  18.         FileName = .SelectedItems(1)
  19.         FileName = Left(FileName, InStrRev(FileName, ""))
  20.         FileName = FileName & "加密.xlsm"        ' 可根据实际修改加密文件名:加密.xlsm
  21.         'Debug.Print FileName
  22.         If Len(Dir(FileName)) = 0 Then MsgBox FileName & " 文件不存在!": End

  23.         Set Dict = CreateObject("Scripting.Dictionary")
  24.         Set xlApp = CreateObject("Excel.Application")
  25.         'xlApp.Visible = True
  26.         Set xlwb = xlApp.Workbooks.Open(FileName, ReadOnly:=True)
  27.         With xlwb.WorkSheets("Sheet1")        ' 可根据实际修改密码工作表名:Sheet1
  28.             Count = .Cells(.Rows.Count, 1).End(-4162).Row
  29.             For i = 2 To Count        ' 无标题行:2改成1
  30.                 Key = Trim(.Cells(i, 1).Value)        ' 第1列为姓名(文件名):注意绝对不能有重名!
  31.                 Dict(Key) = Right(Trim(.Cells(i, 2).Value), PWLen)        ' 第2列为身份证号码(位置可修改)
  32.                 'Debug.Print Key, Dict(Key)
  33.             Next i
  34.         End With
  35.         xlwb.Close False
  36.         xlApp.Quit
  37.         Set xlwb = Nothing
  38.         Set xlApp = Nothing

  39.         For Each File In .SelectedItems
  40.             On Error GoTo Error
  41.             Set myDoc = Documents.Open(File)
  42.             If myDoc Is Nothing Then
  43.                 MsgBox File & Msg
  44.             Else
  45.                 Key = myDoc.Name
  46.                 Key = Trim(Left(Key, InStrRev(Key, ".") - 1))
  47.                 PassWord = Dict(Key)
  48.                 'Debug.Print Key, PassWord
  49.                 If Len(PassWord) <> PWLen Then
  50.                     MsgBox "未找到" & Key & " 或 密码不规范!"
  51.                 Else
  52.                     With myDoc
  53.                         .ReadOnlyRecommended = False
  54.                         .PassWord = PassWord
  55.                         .Close True
  56.                     End With
  57.                     Set myDoc = Nothing
  58.                 End If
  59.             End If
  60.         Next File
  61.     End With

  62.     Set Dict = Nothing
  63.     MsgBox "已完成批量加密!"
  64.     End

  65. Error:
  66.     'Debug.Print Err.Number
  67.     Select Case Err.Number
  68.     Case 4198
  69.         Msg = " 已加密并跳过!"
  70.     Case 6295
  71.         Msg = " 格式有问题!"
  72.     Case 6301
  73.         Msg = " 已打开(关闭后才能加密)!"        ' 因为无法确定如有修改是否应该保存
  74.     Case Else
  75.         Msg = " 打开错误!"
  76.     End Select
  77.     On Error GoTo 0: Err.Clear
  78.     Resume Next
  79. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-5 08:33 | 显示全部楼层
本帖最后由 batmanbbs 于 2023-6-5 08:34 编辑

补充几点:
1. 代码不会修改任何数据,只是在识别姓名(文件名)和设置密码时,会忽略前后空格(中间空格不会省略,如也需忽略,请使用 REPLACE 过滤一下)
2. 密码是获取身份证的后6位,如果少于6位不会设置密码
3. 如果姓名(文件名)真的有重名,密码是重名中最后一个姓名(文件名)对应的密码
4. 没有对已经打开的文档进行加密,因为无法判断如果文档修改了,修改的内容是否真的需要保存。如果不考虑这个问题,在判断后可以使用 Set myDoc = Documents(File) 后执行加密
5. 这次的代码是在EXCEL版的批量设置密码的基础进行完善的,考虑的情况更多一些,相关代码也可以复制到EXCEL版的代码中使用

TA的精华主题

TA的得分主题

发表于 2023-6-5 09:44 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
batmanbbs 发表于 2023-6-5 01:10

感谢老师提供学习代码的机会,愿好人一生平安快乐!

TA的精华主题

TA的得分主题

发表于 2023-6-5 11:58 | 显示全部楼层
本帖最后由 batmanbbs 于 2023-6-5 19:27 编辑

我也在学习啊,注意:第20句""中间应该有一个\,被吃掉了

另外,82句放到45句的位置更加合理,代码总需要审核,我就不更新了,自己修改一下

TA的精华主题

TA的得分主题

发表于 2023-6-5 14:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如此标准的代码真值得我学习,谢谢!


★★★★★ 【抛去所谓的敬畏之心,你会重新认知这个世界。】 ★★★★★


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

本版积分规则

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

GMT+8, 2024-12-27 04:05 , Processed in 0.047742 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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