Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.05.2008, 16:59   #1
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию Переименовать файлы по списку!?

У меня такой вопрос:

В папке лежат файлы.
В экселе есть список этих файлов.
Название у этих файлов ровны их порядковым номерам.
В экселе кроме порядковых номеров есть столбец с номером выпуска (1,2,3 или A,B,C).
А теперь вопрос:
Как можно переименовать все файлы в папке сразу так, чтобы получилась такая форма:
порядковый номер@номер выпуска.
например:
123546@1
Думаю получится полезная штучка для многих.
Jungo must die!!! (C) Bill Gates.
jungo вне форума
Старый 14.05.2008, 05:16   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Пусть в столбце "A" - имена файлов, в столбце "B" - то, что нужно добавить к имени соответствующих файлов.
1) Пропишите нужный путь к папке.
2) Имена файлов в столбце "A" должны содержать расширение.
3) Если нужно, вставьте проверку существования файла по заданному пути (в коде этого нет).
Код:
Sub RenameFiles()

    Dim OldName As String, NewName As String, MyPath As String, a
    
    MyPath = "D:\Temp\" ' Path to folder
    
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "A") <> "" Then
            a = Split(Cells(i, "A"), ".")
            OldName = MyPath & Cells(i, "A")
            NewName = MyPath & a(LBound(a)) & "@" & Cells(i, "B") & "." & a(UBound(a))
            Name OldName As NewName    ' Rename file.
        End If
    Next

End Sub
Макрос работает с любыми типами файлов.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 14.05.2008 в 06:18.
SAS888 вне форума
Старый 14.05.2008, 10:35   #3
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Пусть в столбце "A" - имена файлов, в столбце "B" - то, что нужно добавить к имени соответствующих файлов.
1) Пропишите нужный путь к папке.
2) Имена файлов в столбце "A" должны содержать расширение.
3) Если нужно, вставьте проверку существования файла по заданному пути (в коде этого нет).
Макрос работает с любыми типами файлов.

Макрос не работает, показывает ошибку.
1. Сами значения работают (подвел мышку - на Nname и на Oname показывает правильные значения).
2. Название файлов у меня н 100 % точны.
3. Можно MyPath выбрать в процессе макроса?
Прикрепил рисунок.
Изображения
Тип файла: jpg rrredfd.jpg (24.4 Кб, 163 просмотров)
Jungo must die!!! (C) Bill Gates.
jungo вне форума
Старый 14.05.2008, 13:56   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите другой вариант.
1) По совету дмидми, используется объект FileSystemObject
2) Добавлено окно выбора рабочей папки.

ПОДКЛЮЧИТЕ в Tools -> References библиотеку Microsoft Scripting Runtime.
Код:
Sub RenameFiles()

    Dim fso As FileSystemObject, OldName As String, NewName As String
    Dim Ext As String, FilePath As String, Fn As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = "C:\"
        .Title = "Select folder"
        .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            FilePath = .SelectedItems(1) & "\"
        End If
    End With
    
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "A") <> "" Then
            OldName = FilePath & Cells(i, "A")
            Fn = fso.GetBaseName(OldName)
            Ext = fso.GetExtensionName(OldName)
            NewName = FilePath & Fn & "@" & Cells(i, "B") & "." & Ext
            Name OldName As NewName    ' Rename file.
        End If
    Next

End Sub
Хочу добавить, что макрос тестирован в Excel 2003
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 14.05.2008 в 14:08. Причина: Добавлено
SAS888 вне форума
Старый 14.05.2008, 14:18   #5
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Получилось!!!

SAS888
Огромное спасибо!!!

Третий мой вопрос в силе.
Jungo must die!!! (C) Bill Gates.
jungo вне форума
Старый 14.05.2008, 16:22   #6
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Восклицание Возможный источник ошибок

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Name OldName As NewName
Вспомним о нежно любимой клавише: nameF1
Цитата:
Сообщение от F1 для Excel VB Name Statement
The file name specified by newpathname can't already exist.
Лень проверять, но не исключено, что FileSystemObject переименовывает/перемещает во что бы то ни стало.
дмидми вне форума
Старый 14.05.2008, 17:08   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

То же лень проверять.
Но не переименовывается.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 14.05.2008, 20:29   #8
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
По умолчанию

Слазил в хэлп для FileSystemObject.

Для Name случай, когда файл с таким именем уже существует, не документирован. Стало быть, требуется предварительное удаление.

Перемещение там отдельно, и при перемещении такой конфликт вызывает ошибку, которую при желании можно обработать.
дмидми вне форума
Старый 15.05.2008, 06:01   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

IgorGo. Ты не забыл подключить Microsoft Scripting Runtime?

дмидми. Я же оговорил, что
Цитата:
Если нужно, вставьте проверку существования файла по заданному пути (в коде этого нет).
Вот код с проверками: Если искомый файл существует, а конечного нет, только тогда переименовываем. Ну, или делаем то, что там автору темы нужно.
Код:
Sub RenameFiles()

    Dim fso As FileSystemObject, OldName As String, NewName As String
    Dim Ext As String, FilePath As String, Fn As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = "C:\"
        .Title = "Select folder"
        .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            FilePath = .SelectedItems(1) & "\"
        End If
    End With
    
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "A") <> "" Then
            OldName = FilePath & Cells(i, "A")
            Fn = fso.GetBaseName(OldName)
            Ext = fso.GetExtensionName(OldName)
            NewName = FilePath & Fn & "@" & Cells(i, "B") & "." & Ext
            
            If Dir(OldName) <> "" Then If Dir(NewName) = "" Then Name OldName As NewName
            
        End If
    Next

End Sub
jungo. Что значит
Цитата:
Третий мой вопрос в силе.
Я что-то не то предложил? Путь к рабочей папке запрашивается в ходе макроса. После указания рабочей папки - продолжение работы процедуры. Или что Вам нужно?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 15.05.2008, 09:23   #10
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение

jungo. Что значит Я что-то не то предложил? Путь к рабочей папке запрашивается в ходе макроса. После указания рабочей папки - продолжение работы процедуры. Или что Вам нужно?
Всё супер! Спасибо! Я пост написал до того как увидел твой ответ.

Единственный вопрос, так, для себя:

Окно для выбора папки открывается, но в нём не видно файлов лежащих в папке. Возможно ли сделать так, чтобы можно было видеть файлы (All Files). Пытаюсь предотвратить ошибки чайников (своих в том числе).
Jungo must die!!! (C) Bill Gates.
jungo вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли программно переименовать папку Rusl92 Общие вопросы Delphi 3 13.09.2008 12:52
Под скажите как переименовать файл? snaem Общие вопросы .NET 4 23.04.2008 23:15
INI файлы aesoem Общие вопросы Delphi 3 24.12.2007 21:22
как переименовать samosval Общие вопросы .NET 1 19.12.2007 21:40
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53