Страницы: 1
RSS
Сохранение файла в зависимости от имение файла
 
Доброго времени суток. уважаемые Форумчане!  
 
Задача стоит следующая:  
 
1. Есть постоянная папка (например, D:\Папка1\)  
2. В ней находятся также около 20 постоянных папок с разными именами (например, 001, 002, 003 и т.д.)  
3. Есть много файлов в формате *.xls с именами, например, частьимени-380019874563 (частьимени - разные цифрово-буквенные значения) или 380023214587.  
4. Как сделать так, чтобы в зависимости от имени файла файл сохранялся в одну из папок с таким же именем, например, файл частьимени-380019874563 (выбор имени по цифрам остальная часть имени не интересует) должен сохранятся в папку 001 под именем 9874563, а файл 380023214587 в папку 002 под именем 3214587, т.е. 38001 или 38002 и т.д. мы должны откинуть.  
5. При этом файлы должны сохранится в формате *.csv (MS-DOS).  
6. Можно чтобы файлы сохранялись не автоматически, а при нажатии кнопки выполнения макроса появлялось окно сохранения с уже готовым именем и нужному пути, т.е. сейчас сохранение происходит так, открываем файл частьимени-380019874563.xls, жмем F12, выбираем путь D:\Папка1\001, стираем имя файла до 9874563, выбираем формат *.csv (MS-DOS), жмем сохранить.  
7. Иногда бывает так что, например, в папке 001 уже присутствует файл 9874563, тогда его надо сохранить под именем 9874563а, если и такой есть то под именем 9874563b, тоже есть тогда под именем 9874563с и т.д.  
8. Так же бывает что имена файлов могут иметь следующий вид "частьимени-380019874563.txt.xls, других вариантов кроме ".txt" после цифр не бывает.  
9. Если же возможно сохранение автоматически по нажатию кнопки выполнения макроса, тогда должно появляться окошко с именем сохраненного файла, например файл сохранен D:\Папка1\001\9874563d  
 
Ребят, такое вообще возможно сделать?
 
Можно.  
Но за большие деньги.
 
Да, можно.  
Например, делается надстройка, которая перехватывает событие сохранения файла,  
и, если имя файла содержит набор цифр (соответствующий заданной маске), то:  
1) команда сохранения отменяется  
2) вычисляется новый путь, при необходимости создаются недостающие папки  
3) сохраняется файл (или его копия) по нужному пути в нужном формате  
 
PS: Диалоговое окно сохранения выводить совсем необязательно
 
Не так наворочено, как тёзка предложил, но тоже можно доделать наработку:  
 
Sub savetest()  
Dim sName As String, dDir As String, fName As String  
sName = ThisWorkbook.Name  
sName = Replace(sName, ".txt.xls", ".xls")  
' частьимени-380019874563.xls  
dDir = StrReverse(Mid(StrReverse(sName), 12, 3))  
fName = StrReverse(Mid(StrReverse(sName), 5, 7))  
'осталось сохранить  
End Sub
 
Ув. Hugo, ничего не происходит при выполнении макроса, как указать путь и папку куда должно пойти сохранение? В Вашем коде его нету
 
Так я же написал - наработка. И "осталось сохранить" - это значит нужно дописать формирование строки адреса сохранения и собственно саму процедуру сохранения.  
Т.к. это легко и неинтересно - не делал. Сделал, что чуть сложнее - dDir это имя папки, fName это имя файла без расширения.  
Доделывайте, учитесь...
 
Ок, спасибо!
 
Ещё мне не совсем понятно, куда Вы этот макрос собираетесь класть.  
Я думаю, лучше бы в Personal.xls и кнопку вывести на панель.  
Тогда жать кнопку при активном нужном файле, и строку кода заменить на  
sName = ActiveWorkbook.Name
 
да, на кнопку буду выводить
Страницы: 1
Читают тему
Наверх