Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA获取真实文件夹路径长度(不包括平铺)_Vba_Excel - Fatal编程技术网

Excel VBA获取真实文件夹路径长度(不包括平铺)

Excel VBA获取真实文件夹路径长度(不包括平铺),vba,excel,Vba,Excel,我有VBA代码,每X次客户端保存文件时,它都会创建一个备份文件(使用.SaveCopyAs)。最近,一个客户端遇到了最大文件夹和文件路径长度,该长度大约为220个字符。我试图捕获长文件名,但Excel/Windows正在用~(tilde)替换长文件夹名,因此我无法获得真正的路径长度 如何获取实际文件夹/文件路径字符串长度并防止Windows使用“~” 有关使用GetLongPathNameAPI的代码,请参阅。请注意,您需要将缓冲区大小从代码中显示的165增加。是的,这是一个困难的问题,我花了很

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

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


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

是的,这是一个困难的问题,我花了很长时间试图解决这个问题,但由于其根源是windows的本质,我也无法做到:(sry no help)您是否尝试过Win API调用
GetLongPathName
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