ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 长文档名称文档复制遇到的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-1 06:32 | 显示全部楼层 |阅读模式
各位老师:

长文档名文档  文件夹中有5个文档,我想将长文档名文档  文件夹中有5个文档复制到 长文档名文档2 文件夹中。代码如下:

Sub fzwjA()
'获取桌面路径
zmpath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\"
'源文件夹路径
opath = zmpath & "文件复制测试\长文档名文档\"
'新文件夹路径
ppath = zmpath & "文件复制测试\长文档名文档2\"
'If Dir(ppath, vbDirectory) <> "" Then
'    RmDir ppath
'End If
'MkDir (ppath)
Dim reg As Object
'创建正则对象
Set reg = CreateObject("VBScript.Regexp")
'汉字
reg.Pattern = "[\u4e00-\u9fa5]"
reg.Global = True
reg.IgnoreCase = True
'创建了一个FSO对象
Set fso = CreateObject("Scripting.FileSystemObject")
'错误处理
On Error Resume Next
'遍历文件夹获取文件
fname = Dir(opath)
If Err.Number = 0 Then
    '文件夹逐个文档循环处理
    Do While Len(fname) <> 0
        Debug.Print Left(fname, 5) & "  " & Len(fname)
        Set matches = reg.Execute(fname)
        CountZh = matches.Count
        zfzs = Len(fname) - CountZh + CountZh * 2
        Debug.Print Left(fname, 5) & "  " & zfzs
        '新文档名
        nfname = fname & Format(Date, "yyyymmdd")
        '新文档后缀名
        hzstr = "." & Split(opath & fname, ".")(1)
        '复制文档
        fso.Copyfile opath & fname, ppath & nfname & hzstr, overwritefiles:=True
        '清空源文档变量
        fname = ""
        On Error Resume Next
        '获取下一个文档
        fname = Dir()
    Loop
End If
End Sub

问题:
1、文件夹中第3个文档名称总字符数超260,dir函数获取不到此文档
2、当文件夹中遇到一个错误文档时跳出do while 循环,未处理文件夹中剩余的文档


请老师帮看看,指点一下,谢谢

TA的精华主题

TA的得分主题

发表于 2024-6-1 08:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
文档路径名称总长度不得大于247个英文字符

TA的精华主题

TA的得分主题

发表于 2024-6-1 08:57 | 显示全部楼层
若文档路径名称大于247个英文字符,可采用:1、提升目标文档的保存层级,以减少路径名称的字符数;2、减少路径层级中,各文件夹名称的字符数,即精减各层级的文件夹名称,使路径的总字符数小于247即可

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 09:06 | 显示全部楼层
谢谢huarong7984老师,请问怎样自动实现提升目标文档的保存层级、减少路径层级等目标,达到批量处理的最终效果

TA的精华主题

TA的得分主题

发表于 2024-6-1 10:18 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
给个附件,多打草稿。

TA的精华主题

TA的得分主题

发表于 2024-6-1 10:45 | 显示全部楼层
大公臻信 发表于 2024-6-1 09:06
谢谢huarong7984老师,请问怎样自动实现提升目标文档的保存层级、减少路径层级等目标,达到批量处理的最终 ...

用 SHFileOperation 即可
1.png

api复制文件及文件夹.zip

905 Bytes, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-6-1 11:22 | 显示全部楼层
perfect131 发表于 2024-6-1 10:45
用 SHFileOperation 即可

解决dir 文件名限制
2.png

解决dir文件名限制.zip

966 Bytes, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-2 06:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢perfect131老师

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-3 09:00 | 显示全部楼层
#If VBA7 Then
    Private Declare PtrSafe Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
#Else
    Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
#End If
老师,我的电脑安装Windows 10带Office 为何#else后一句显示红色。请指点一下。谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-22 12:07 , Processed in 0.042410 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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