Страницы: 1 2 След.
RSS
Как при помощи VBA переименовать группу файлов на жестком диске ?
 
Имеется "новая папка" , в ней отсканированные изображения с именами сгенерированными при сканирование программой для сканирования. В "новой папке" есть еще вложенная папка "новая папка(2)" в ней аналогичные файлы, но сделанные днем позже а имена начинаются с аналогичного имени что и в "новой папке" и т.д.  
 
Вопрос :  
Как при помощи VBA переименовать группу файлов, т.е. сквозными именами и в "новой папке" и во всех вложеных в нее папках.  
Что бы файлы имели имена : (например) "Отдых на море" + №1  
, "Отдых на море" + №2 и т.д.    
 
Да и адрес "новой папки" желательно не ручками вбивать , а выбирать из проводника...
 
{quote}{login=Drony}{date=19.12.2007 09:53}{thema=Как при помощи VBA переименовать группу файлов на жестком диске ?}{post}Имеется "новая папка" , в ней отсканированные изображения с именами сгенерированными при сканирование программой для сканирования. В "новой папке" есть еще вложенная папка "новая папка(2)" в ней аналогичные файлы, но сделанные днем позже а имена начинаются с аналогичного имени что и в "новой папке" и т.д.  
 
Вопрос :  
Как при помощи VBA переименовать группу файлов, т.е. сквозными именами и в "новой папке" и во всех вложеных в нее папках.  
Что бы файлы имели имена : (например) "Отдых на море" + №1  
, "Отдых на море" + №2 и т.д.    
 
Да и адрес "новой папки" желательно не ручками вбивать , а выбирать из проводника...{/post}{/quote}  
 
 
воспользуйся чем-нибудь вроде Total Commander. Там есть функция группового переименования. Гораздо удобнее, чем писать макросы
 
{quote}{login=каа}{date=19.12.2007 10:31}{thema=Re: Как при помощи VBA переименовать группу файлов на жестком диске ?}{post}{quote}{login=Drony}{date=19.12.2007 09:53}{thema=Как при помощи VBA переименовать группу файлов на жестком диске ?}{post}Имеется "новая папка" , в ней отсканированные изображения с именами сгенерированными при сканирование программой для сканирования. В "новой папке" есть еще вложенная папка "новая папка(2)" в ней аналогичные файлы, но сделанные днем позже а имена начинаются с аналогичного имени что и в "новой папке" и т.д.  
 
Вопрос :  
Как при помощи VBA переименовать группу файлов, т.е. сквозными именами и в "новой папке" и во всех вложеных в нее папках.  
Что бы файлы имели имена : (например) "Отдых на море" + №1  
, "Отдых на море" + №2 и т.д.    
 
Да и адрес "новой папки" желательно не ручками вбивать , а выбирать из проводника...{/post}{/quote}  
 
 
воспользуйся чем-нибудь вроде Total Commander. Там есть функция группового переименования. Гораздо удобнее, чем писать макросы{/post}{/quote}  
 
 
Понятно, что есть специализированные программы обработки файлов (файловые мененджеры), но вопрос стоит как это реализовать в XL .
 
как-то так. набросано на скорую руку, так что требует тщательной доработки напильником. не забудь подключить библиотеку micrisoft scrypting runtime  
 
Sub RenameFiles()  
 
Dim fs As New FileSystemObject  
Dim fl As Folder  
Dim fls As Files  
Dim f As File  
 
Set fl = fs.GetFolder("d:\на печать")  
Set fls = fl.Files  
 
n = 0  
For Each f In fls  
   'определяем тип файла  
   ex = Mid(f.Name, InStrRev(f.Name, "."), Len(f.Name) - InStrRev(f.Name, ".") + 1)  
     
   n = n + 1  
   Debug.Print "отдых на море-" & n & ex  
     
Next  
 
End Sub
 
чорт. вместо строчки, где debug.print  ставишь эту:     f.Name = "отдых на море-" & n & ex
 
Спасибо, посмотрю.  
 
Может у кого-нибуть еще есть предложения ?
 
я, по-моему, уже отвечал...  
но добавлю.  
Помнится на икселе вы настаивали из-за того, что админы,мол, вам не дают установить нужные программы..  
НО офис у вас все же есть.. А в нем есть такая программка(2003 офис, по крайней мере), как Microsoft Office Picture Manager, которая прекрасно справляется с такой задачей
 
Половину задачи решил - программно выбираю папку для обработки(получаю полный путь к ней).  
 
Теперь вопрос - как на лист вывести в столбец имена всех файлов из этой папки (например с расширением .xls) ?
 
dir  в цикле с маской *.xls  
счетчик цикла задает номер строки вывода
 
{quote}{login=slan}{date=20.12.2007 11:53}{thema=}{post}dir  в цикле с маской *.xls  
счетчик цикла задает номер строки вывода{/post}{/quote}  
 
Спасибо.  
А по какому условию остановить цикл?
 
вот так:  
   If f.Type = "Лист Microsoft Excel" Then
 
да, как указать , чтобы в цикле также перебирались все файлы.  
А то у меня ячейки перебирает, а вот в них вставляет только один файл ?
 
сорри, не првильно прочитал вопрос. вот так  
for....  
if  значение=истина then  
   exit for  
end if  
next
 
надо код смотреть, наверняка в цикле ошибка.  
 
как на этом форуме бороться с gateway&
 
Вот мой рабочий кусок кода.  
Как его доработать, чтобы шел перебор    strFolderFullPath & "*.xls"    - это полный путь к файлу    
 
For i=1 To 100  
Cells(i, 1) = Dir(strFolderFullPath & "*.xls")  
Next i
 
Вот весь код :  
 
 
 
Sub BrowseForFolderShell()  
 
'     '//Minimum DLL version shell32.dll version 4.71 or later  
'     '//Minimum operating systems   Windows*2000, Windows NT 4.0 with Internet Explorer*4.0,  
'     '//Windows*98, Windows 95 with Internet Explorer*4.0  
   Dim objShell As Object  
   Dim objFolder As Object  
   Dim strFolderFullPath As String  
   Dim i As Integer  
       Set objShell = CreateObject("Shell.Application")  
    'oFolder = Shell.BrowseForFolder(Hwnd, sTitle, iOptions [, vRootFolder])
  Set objFolder = objShell.BrowseForFolder(0, "Ïîæàëóéñòà âûáåðåòå ïàïêó...", BIF_NEWDIALOGSTYLE Or BIF_USENEWUI, "MyDocuments") 'SpecFolders.CSIDL_FAVORITES  
       
   If (Not objFolder Is Nothing) Then  
        '// NB: If SpecFolder= 0 = Desktop then ....  
       On Error Resume Next  
       If IsError(objFolder.Items.Item.path) Then strFolderFullPath = CStr(objFolder): GoTo GotIt  
       On Error GoTo 0  
        '// Is it the Root Dir?...if so change  
       If Len(objFolder.Items.Item.path) > 3 Then  
           strFolderFullPath = objFolder.Items.Item.path & Application.PathSeparator  
       Else  
           strFolderFullPath = objFolder.Items.Item.path  
       End If  
   Else  
       MsgBox "Âû íàæàëè ÎÒÌÅÍÀ, è ñîîòâåòñòâåííî ÏÀÏÊÀ íå âûáðàíà": GoTo Xit  
   End If  
       
GotIt:  
'    MsgBox "You selected:= " & strFolderFullPath, vbInformation, "ObjectFolder:= " & objFolder  
    Cells(1, 1) = strFolderFullPath  
       
    For i = 2 To 5  
    Cells(i, 1) = Dir(strFolderFullPath & "*.xls")  
    Next i  
 
Xit:  
   Set objFolder = Nothing  
   Set objShell = Nothing  
       
End Sub  
 
 
необходимый цикл нужно организовать в конце кода.
 
я бы не стал мудрить и циклом вынул бы названия файлов в массив, а потом перенес бы это на лист
 
{quote}{login=kaa}{date=20.12.2007 12:41}{thema=}{post}я бы не стал мудрить и циклом вынул бы названия файлов в массив, а потом перенес бы это на лист{/post}{/quote}  
а можно в примере, как загнать в массив, а после в ячейки ?  
А то я с массивами не совсем еще дружу...
 
{quote}{login=Drony}{date=20.12.2007 01:14}{thema=Re: }{post}{quote}{login=kaa}{date=20.12.2007 12:41}{thema=}{post}я бы не стал мудрить и циклом вынул бы названия файлов в массив, а потом перенес бы это на лист{/post}{/quote}  
а можно в примере, как загнать в массив, а после в ячейки ?  
А то я с массивами не совсем еще дружу...{/post}{/quote}  
 
'если хочешь, чтобы нумерация массивов шла от 1 ставишь  
option base 1  
 
'объявляешь динамический массив  
dim D()  
redim D(1)  
 
'обнуляешь счетчик    
n=0  
 
'организуешь цикл и условие отбора (для предыдущего кода так:)  
For Each f In fls  
If f.Type = "Лист Microsoft Excel" Then  
n=n+1  
redim preserve D(n)  
D(n)=f.name  
end if  
next  
 
'потом вставляешь все в лист  
range(cells(1,1),cells(ubound(D),1))=D  
 
'ubound используешь для определения границ массива  
 
вроде все должно работать, писал не проверяя
 
немного не понятно.  
Можно рассмотреть конкретный пример :  
 
Есть папка D:\моя папка\  
В ней есть допустим 7 файлов    
 
море.jpg  
море1.jpg  
я на катере.jpg  
пароход.jpg  
восход.jpg  
волна.jpg  
просто.jpg  
 
 
 
(.jpg или .doc , т.е. файлы одного типа).    
Приведи пожалуйста пример макроса, который бы загнал бы все 7 имен файлов в ячейки с А1 по А7 ?  
И как программно узнать количество файлов в указанной папке ?
 
удели пожалуйста еще минуточку предидущему посту...
 
Вот есть подобный файл - он делает плайлист из содержащихся в указанной папке муз.файлов.  
Но как выдрать из нее нужный мне кусок я немогу понять..
 
{quote}{login=Drony для kaa}{date=20.12.2007 04:41}{thema=для   kaa}{post}удели пожалуйста еще минуточку предидущему посту...{/post}{/quote}  
 
сейчас немног занят.  
да еще и 502 Bad Gateway все время вылазит.  
скинь, пожауйста, мой первоначальный код, у меня не сохранился. писать заново времени нет, а добрацца через форум не могу
 
{quote}{login=kaa}{date=19.12.2007 11:12}{thema=}{post}как-то так. набросано на скорую руку, так что требует тщательной доработки напильником. не забудь подключить библиотеку micrisoft scrypting runtime  
 
Sub RenameFiles()  
 
Dim fs As New FileSystemObject  
Dim fl As Folder  
Dim fls As Files  
Dim f As File  
 
Set fl = fs.GetFolder("d:\на печать")  
Set fls = fl.Files  
 
n = 0  
For Each f In fls  
   'определяем тип файла  
   ex = Mid(f.Name, InStrRev(f.Name, "."), Len(f.Name) - InStrRev(f.Name, ".") + 1)  
     
   n = n + 1  
   Debug.Print "отдых на море-" & n & ex  
     
Next  
 
End Sub{/post}{/quote}
 
Во вложении книга с макросом.  
Его нужно доделать -  чтобы начиная  с А2 и ниже вписались имена (или полный путь  - неважно )всех содержащихся в выбранной папке файлов (по расширению) - которое можно зараннее выбирать.
 
{quote}{login=Drony}{date=20.12.2007 01:14}{thema=Re: }{post}{quote}{login=kaa}{date=20.12.2007 12:41}{thema=}{post}я бы не стал мудрить и циклом вынул бы названия файлов в массив, а потом перенес бы это на лист{/post}{/quote}  
а можно в примере, как загнать в массив, а после в ячейки ?  
А то я с массивами не совсем еще дружу...{/post}{/quote}  
 
вот так
 
'если хочешь, чтобы нумерация массивов шла от 1 ставишь  
option base 1  
 
'объявляешь динамический массив  
dim D()  
redim D(1)  
 
'обнуляешь счетчик    
n=0  
 
'организуешь цикл и условие отбора (для предыдущего кода так:)  
For Each f In fls  
If f.Type = "Лист Microsoft Excel" Then  
n=n+1  
redim preserve D(n)  
D(n)=f.name  
end if  
next  
 
'потом вставляешь все в лист  
range(cells(1,1),cells(ubound(D),1))=D  
 
'ubound используешь для определения границ массива  
 
вроде все должно работать, писал не проверяя
 
Спасибо.  
все работает.Вот так - с мира по нитке - мне макрос !  
Позже выложу файл с палной рабочей процедурой...
 
Макрос работае только в твоей книге.  
Копирую текст кода в свою - выдает ошибку :  
 
Compile error:  
User-defined type not defined  
 
и выделена строка    
Dim fs As New FileSystemObject  
 
Почему так ?  
Может при создании модуля нужно поменять какието свойства в книге ?  
У меня код был в листе - не работает  
Перенес в новый модуль  - тоже самое  
 
Не подскажеш в чем дело ?
 
подключи библиотеку microsoft scrypting runtime  
 
в редакторе: tools-> preferences
Страницы: 1 2 След.
Читают тему
Наверх