Переименовать текстовые файлы в нескольких подпапках - PullRequest
0 голосов
/ 03 мая 2019

Итак, у меня есть папка с именем «Test», и в ней есть подпапки с разными именами (в столбце A), и в каждой подпапке есть текстовые файлы с именем «indexpre».

Мне нужно переименовать файл в том, что у меня есть в столбце C в Excel.

Я пытался использовать другой код, который я видел в Интернете, но я получаю ту же ошибку.

Sub ReNameFiles()

Dim myPath As String
Dim fullPath As String
myPath = "C:\Users\cooketd\Desktop\Test"

r = 1

For Each cell In Range("A1:A" & Range("A1").End(xlDown).Row)
    fullPath = myPath & "\" & cell & "\"

    Name fullPath & "indexpre.txt" As fullPath & Cells(r, 3).Value & ".txt"
   r = r + 1

Next cell

End Sub

Когда я запускаю код, я получаю сообщение об ошибке в этой строке

Name fullPath & "indexpre.txt" As fullPath & Cells(r, 3).Value & ".txt"

, чтобы сказать, что ошибка времени выполнения '53': файл не найден.

Я проверил исходный файл, правильный путь к файлу и файл «indexpre.txt».

Я также удалил .txt из этой строки кода, и это не имело никакого значения для результата.

Буду очень признателен за любую помощь.

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Попробуйте:

Sub tgr()

    Dim ws As Worksheet
    Dim aData As Variant
    Dim sInitialPath As String
    Dim sFullPath As String
    Dim sFileName As String
    Dim sFileToRename As String
    Dim i As Long

    Set ws = ActiveWorkbook.ActiveSheet
    aData = ws.Range("A1:C" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).Value

    sInitialPath = Environ("UserProfile") & "\Desktop\Test"
    If Right(sInitialPath, 1) <> "\" Then sInitialPath = sInitialPath & "\"

    sFileToRename = "indexpre.txt"

    For i = LBound(aData, 1) To UBound(aData, 1)
        sFullPath = sInitialPath & aData(i, 1)
        If Right(sFullPath, 1) <> "\" Then sFullPath = sFullPath & "\"
        sFileName = Dir(sFullPath & sFileToRename)
        If Len(sFileName) > 0 Then Name sFullPath & sFileName As sFullPath & aData(i, 3) & ".txt"
    Next i

End Sub
0 голосов
/ 03 мая 2019

Попробуйте использовать переменные и посмотрите, существует ли файл на самом деле, вы можете напечатать имена из ThisName и посмотреть, действительно ли это значение того, что вы хотите

Dim thisName as string
dim toThisName as string 

thisName =  fullPath & "indexpre.txt" 
toThisName =  fullPath & Cells(r, 3).Value & ".txt"

if vba.dir(thisName) = "" then 
   'file not found
    stop
end if 

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