破解加密过的Excel文件(.xls) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 Private Sub VBAPassword() '你要解保护的Excel文件路径(把要解除的excel保存为2003-97 xls) Filename = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA解除") If Dir(Filename) = "" Then MsgBox "没找到相关文件,清重新设置。" Exit Sub Else FileCopy Filename, Filename & ".bak" '备份文件。 End If Dim GetData As String * 5 Open Filename For Binary As #1 Dim CMGs As Long Dim DPBo As Long For i = 1 To LOF(1) Get #1, i, GetData If GetData = "CMG=""" Then CMGs = i If GetData = "[Host" Then DPBo = i - 2: Exit For Next If CMGs = 0 Then MsgBox "请先对VBA编码设置一个保护密码...", 32, "提示" Exit Sub End If Dim St As String * 2 Dim s20 As String * 1 '取得一个0D0A十六进制字串 Get #1, CMGs - 2, St '取得一个20十六制字串 Get #1, DPBo + 16, s20 '替换加密部份机码 For i = CMGs To DPBo Step 2 Put #1, i, St Next '加入不配对符号 If (DPBo - CMGs) Mod 2 <> 0 Then Put #1, DPBo + 1, s20 End If MsgBox "文件解密成功......", 32, "提示" Close #1 End Sub
代码是在网上随便找的,具体出处记不清了,随便找找就能找到了。可能是这个:如何解除Excel VBA工程密码
具体使用方法就是:
1、将你要解除的Excel文件关闭,另存为2003版格式(.xls)
2、在本文件里按Alt+F11,然后点击运行,打开第一步另存为2003版格式的Excel表格即可。
获取保存在onedrive里的文件的路径 onedrive是微软的一个很好用的同步网盘,一般会把工作相关的文件保存在这上面,与office办公套件(Word、Excel、PowerPoint)和Microsoft 365会员等配合,可以启用这些软件的自动保存功能,就是每次编辑完之后都会自动保存,这样就不用担心突然断电导致文档没保存了,不过这种情况下,文件其实是保存在网上的,如果用VBA的命令ThisWorkbook.Path
去获取文件地址,会得到一个类似https://d.docs.live.net/abcdefghijklmn/测试文件夹
的网络地址,而不是正常的E:\Onedrive\测试文件夹
本地路径(这里以onedrive文件夹是放在E:下的)
由于平时用的Excel文件里的有些VBA程序在运行时会用所在文件的路径,用上面的网络地址的话会出现问题,所以写了一个简单的获取本地路径的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Sub 获取文件本地路径() '先获取一下返回的文件地址 mypath = ThisWorkbook.Path '判断一下是否是网络地址,如果是网络地址就将网络地址的部分替换掉,同时还要把原来地址里的/改为\ If InStr(mypath, "https://d.docs.live.net/") Then '这里的Split(ThisWorkbook.Path, "/")方法是用 "/"符号为分隔符号,将前面的ThisWorkbook.Path里的地址分成若干个元素,并取出第3个元素,其中第0个元素是https: 第1个是空 第2个是d.docs.live.net 第3个是abcdefghijklmn 第4个是测试文件夹 'Environ("OneDrive")是为了得到onedrive所在文件夹的路径,这里是E:\Onedrive '得到第3个元素abcdefghijklmn之后用onedrive所在文件夹的路径替换掉,再把地址里的/改为\,这样就得到了正常的本地路径 mypath = Replace(mypath, "https://d.docs.live.net/" & Split(ThisWorkbook.Path, "/")(3), Environ("OneDrive")) mypath = Replace(mypath, "/", "\") End If '输出原来的结果,结果为 https://d.docs.live.net/abcdefghijklmn/测试文件夹 Debug.Print ThisWorkbook.Path '输出转换后的结果,E:\Onedrive\测试文件夹 Debug.Print mypath End Sub
有些Excel文件打开后无法运行VBA,因为VBE6EXT.OLB不能被加载 具体现象就不描述了,反正就是VBA无法运行,如果打开【开发工具】(或者按Alt+F11也可以打开),选【Visual Basic】打开VBA界面,之后选【工具】-【引用】,一般会发现这里面提示有些错误,大概意思就是找不到VBE6EXT.OLB
文件的路径,里面列出来的路径一般是WPS的,打开这个路径之后也的确找不到VBE6EXT.OLB
文件,所以应该就是WPS导致的问题
具体解决办法如下,网上也有一些相关的内容,但是没找到我当时看的那个文章,这里就不放链接了:
1、快捷键 Win+R 进入运行
2、运行输入框 输入Regedit.exe (不区分大小写)回车
3、修改 HKEY_CLASSES_ROOT\TypeLib{0002E157-0000-0000-C000-000000000046}\5.3\0\win32 的数据值为自己的 VBE6EXT.OLB的路径,我这里的路径为 C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB
4、重启Office
VBA与selenium爬虫 可以参考这个视频【VBA如何系列】如何在VBA中使用Selenium爬动态网页
视频里的步骤如下:
1 2 3 4 5 6 1、去 https://github.com/florentbr/SeleniumBasic/releases 下载selenium for VBA 2、安装对应浏览器的驱动 https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/install_drivers/ 下载的要和浏览器版本相匹配 3、把下载出来的driver文件放到第一步selenium的安装路径里 C:\Users\lenovo\AppData\Local\SeleniumBasic 4、下载ms.net 3.5 这个可能大多数电脑都已经装过了,我跳过了 5、在vbab编辑界面中选【工具】-【引用】,选择 Selenium Type Library
还有一篇文章也可以参考:vba中使用Selenium
其他一些命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 '这样可以显示excel状态栏 Application.DisplayStatusBar = true '可以在状态栏里输出一些东西 Application.StatusBar = "输出的内容" '在运行计算程序之前先把屏幕刷新关了,等计算结束再打开,可以加快计算速度 Excel.Application.ScreenUpdating = False '关闭 Excel.Application.ScreenUpdating = True '打开 '控制自动重算的命令(是在【文件】-【选项】-【公式】-【工作簿计算】里,有时候也会影响计算速度,需要关闭自动重算之后再运行代码可能会快一点 Application.Calculation = xlAutomatic '对应【工作簿计算】里自动重算选项 Application.Calculation = xlManual '对应【工作簿计算】里手动重算选项 '一个经常会出错的点 '单元格作为参数传入函数后其实是二维数组 '需要用transpose函数转成一维数组后再用 XX_arr = Excel.Application.WorksheetFunction.Transpose(XX_range)