【问题标题】:Excel VBA Get True Folder Path Length (Excluding Tilde)Excel VBA获取真实文件夹路径长度(不包括波浪号)
【发布时间】:2015-07-02 22:00:33
【问题描述】:

我有 VBA 代码,每 X 次我的客户保存文件时都会创建一个备份文件(使用 .SaveCopyAs)。最近,一个客户遇到了最大文件夹和文件路径长度,似乎大约是 220 个字符。我正在尝试捕获长文件名,但 Excel/Windows 正在用 ~(波浪号)替换长文件夹名称,因此我无法获得真正的路径长度。

如何获取实际文件夹/文件路径字符串长度并防止 Windows 使用“~”?

Sub Backup()
    Set awb = ActiveWorkbook

    BackupFolder = awb.Path & "\Backups"   
    BackupFileName = BackupFolder & "\" & awb.Name
    BackupFileName = BackupFileName & " " & Format(Now(), "mmddhhmm") & ".xlsm"

    'debug.print BackupFileName 
    'Result: D:\MF\DOCUME~1\LATEST~1\MASTER~1\SUPERL~1\SUPERL~1\Backups\TestLength-07021655.xlsm

    'debug.print Len(BackupFileName)
    'Result: 83 but the TRUE length is well over 300 characters

    PathLen = Len(BackupFileName) 'Result: 83
    If PathLen > 215 Then 'This obviously doesn't fire
        BackupFolder = GetDesktop & "BidListBackups"
        BackupFileName = BackupFolder & "\" & awb.Name
        BackupFileName = BackupFileName & " " & sType & Format(Now(), "mmddhhmm") & ".xlsm"
    End If

    With awb
        .SaveCopyAs BackupFileName
    End With

    If PathLen > 215 
        MsgBox "Backup file was saved to your desktop", vbokonly
    End If   
End Sub

【问题讨论】:

  • 是的,这是一个艰难的问题,我花了很长时间试图解决这个问题,但由于它植根于 windows 的本质,我也无法做到:( sry no help
  • 你试过Win API调用GetLongPathName吗?

标签: vba excel


【解决方案1】:

有关使用 GetLongPathName API 的代码,请参阅 this answer。请注意,您需要从代码中显示的 165 增加缓冲区大小。

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2021-04-03
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2017-05-10
    • 2017-06-03
    相关资源
    最近更新 更多