vba возвращает имя файла с вопросительным знаком, поэтому я не могу переименовать файл. Как получить реальное имя файла? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь использовать Excel VBA, чтобы получить список файлов из указанной папки, а затем захватить эти файлы в презентацию PowerPoint.

Проблема в том, что возвращаемый список файлов vba выглядит так:

EOT_ByStepEQ_ByProd_107_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0820_SD-RTP?-?AC28C.png
EOT_ByStepEQ_ByProd_108_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0820_SD-RTP?-?AH04A.png
EOT_ByStepEQ_ByProd_109_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0820_SD-RTP?-?AH04C.png
EOT_ByStepEQ_ByProd_110_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0830_LRTP?-?AC28C.png
EOT_ByStepEQ_ByProd_111_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0830_LRTP?-?AH04A.png
EOT_ByStepEQ_ByProd_112_Toxinv_5_25_PCAPT-AVERAGE_StepName?-?ProdID_0830_LRTP?-?AH04C.png

Эти знаки вопроса в имени файла не позволяют найти эти файлы по имени файла.

И эти вопросительные знаки должны быть пробелами, как я вижу прямо из папки. Поэтому я пытаюсь заменить "? -?" с "-", но я до сих пор не могу найти эти файлы, используя vba после замены. Кажется, в имени файла есть некоторые специальные символы, но в Windows они отображаются как пробел.

Оба Dir или FSO возвращают "?" в имени файла. Можно ли как-нибудь узнать настоящее имя файла? Или я могу найти эти файлы с шаблоном подстановки? Так что я могу переименовать их, чтобы заменить это "?".

Я использую код ниже, чтобы увидеть, что происходит:

Dim MyFSO As FileSystemObject
Dim FileX As File
Dim MyFolder As Folder
Set MyFSO = New Scripting.FileSystemObject
Set MyFolder = MyFSO.GetFolder("C:\Will\6.Tools\2_VBA\Macro_ReplaceChars\Trial")

'To print a list of file names in excel table:
Worksheets("Printing").Activate
Range("A1").Select
For Each FileX In MyFolder.Files
    Selection.Value = FileX.Name
    Selection.Offset(1, 0).Select
Next

'Try to rename files:
For Each FileX In MyFolder.Files
    'Name FileX as
    Debug.Print FileX.Name
            Dim regexFileX As Object: Set regexFileX = CreateObject("VBScript.RegExp")
            With regexFileX
                .Pattern = "\W-\W"
                .Global = True
            End With
                Set matches = regexFileX.Execute(FileX.Name)
                For Each Match In matches
                    strNewFileName = regexFileX.Replace(FileX.Name, "-")
                Next Match
            Debug.Print "    " & strNewFileName
            Debug.Print "    " & FileX.Path
            Debug.Print "    " & MyFolder & "\" & strNewFileName
    Name FileX.Path As "C:\Will\6.Tools\2_VBA\Macro_ReplaceChars\Trial\EOT.png"
Next FileX

Это имя файла, которое я вижу прямо из папки:

EOT_ByStepEQ_ByProd_107_Toxinv_5_25_PCAPT-AVERAGE_StepName - ProdID_0820_SD-RTP - AC28C.png

И я вижу те же имена файлов после того, как этот код выводит список файлов в таблицу Excel. Но коды остановились на линии Имя файла X.Path как "C: \ Will \ 6.Tools \ 2_VBA \ Macro_ReplaceChars \ Trial \ EOT.png" показывая ошибку времени выполнения '52': неверное имя или номер файла.

Действительно, спасибо всем, кто может дать мне подсказку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...