Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Сохранение Excel файла из макроса

Ответить
Настройки темы
2010 - [решено] Сохранение Excel файла из макроса

Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте!
Каждый день создается файл .xlsx в названии которго изменяется дата создания. Например, сегодня - "FIC_09.10.2020", завтра - "FIC_10.10.2020".
Создал макрос, который форматирует этот файл, сохраняет его и закрывает. Но понадобилось перед закрытием сохранить этот файл еще и на другой носитель (USB). Функция "Запись макроса" не помогда, так как макрос запоминает команду как "ChDir "I:\ABC (перенос) ActiveWorkbook.SaveAs Filename:="I:\ABC\FIC_10.10.2020 и т.д.".
Но завтра дата изменится и макрос выдаст ошибку.
Пролистал книги, но ничего похожего не нашел.
Подскажите, пожалуйста: как написать команду, чтобы файл каждый день сохранялся под новым именем (с измененной датой).

Спасибо

С уважением...

Отправлено: 17:45, 19-11-2020

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


mastertm, упакуйте в архив всё, что у Вас сейчас есть, каковой приложите к сообщению.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:42, 19-11-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt MyMacros.xlsm.txt
(15.9 Kb, 6 просмотров)

Я понимаю задачу так: имеем рабочую книгу, например, MyMacros.xlsm, содержащую макрос(ы) для обработки файлов, например, вида FIC_дд.мм.гггг.xlsx. То есть, макрос(ы) хранятся в отдельной книге, обрабатывают другие книги указанного вида.
Вот пример двух макросов.
Код: Выделить весь код
Sub MyMacros()

FileInPref = "Z:\Box_In\FIC_"
BoxOut = "Z:\Box_Out"

' Обрабатываем файл текущего дня "FIC_дд.мм.гггг.xlsx"

FileIn = FileInPref + Mid(Now, 1, 10) + ".xlsx"
Workbooks.Open Filename:=FileIn
    
Call Processing   'Процедура для обработки открытой таблицы

ActiveWorkbook.Save
ActiveWorkbook.Close

With CreateObject("Scripting.FileSystemObject")
    .CopyFile FileIn, BoxOut + "\" + .GetFileName(FileIn), True
End With

End Sub

Sub MyDial()

FileInPref = "Z:\Box_In\FIC_"
BoxOut = "Z:\Box_Out"

' Выбираем для обработки файл из "Префикс_дд.мм.гггг.xlsx"

With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = FileInPref + "*.xlsx"
    .InitialView = msoFileDialogViewList
    .AllowMultiSelect = False

    fileChosen = .Show
    If fileChosen = -1 Then
        FileIn = .SelectedItems(1)
        Workbooks.Open Filename:=FileIn
        
        Call Processing   'Процедура для обработки открытой таблицы

        ActiveWorkbook.Save
        ActiveWorkbook.Close

        With CreateObject("Scripting.FileSystemObject")
            .CopyFile FileIn, BoxOut + "\" + .GetFileName(FileIn), True
        End With
    Else
        MsgBox "Файл не выбран"
    End If
End With

End Sub

Sub Processing()
        ' ==== Просто пример обработки исходного активного листа книги =========
            Columns("C:C").NumberFormat = "0.00"
        ' ==== Конец примера обработки исходного файла =========
End Sub
Оба макроса в принципе очень похожи.

MyMacros обрабатывает файл текущего дня,
MyDial позволяет выбрать файл для обработки.

FileInPref = "Z:\Box_In\FIC_" - путь и префикс исходных файлов
BoxOut = "Z:\Box_Out" - папка для записи копии обработанного файла

Обработку Вашей рабочей книги лучше выделить в отдельную процедуру, я это сделал как пример в процедуре Processing

Прикрепляю пример книги с макросами. Уберите расширение .txt

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-11-2020 в 20:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:35, 19-11-2020 | #3


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska и megaloman спасибо, что откликнулись!

Макрос сохранен в отдельной книге. Запускается файл с макросом, затем исходный файл, который становится активным. Из этого исходного файла запускается макрос, который производит форматирование содержимого (приводит в читабельный вид). В конце макроса записал:

ActiveWorkbook.Save (файл сохраняется в ту папку, из которой был вызван)
ActiveWorkbook.SaveAs "I:\ABC\xxxxx"
ActiveWindow.Close (файл закрывается)

Если запустить макрос в таком виде, файл сохранится на диск I, в папку АВС с именем ххххх.xlsx/

Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\" - выдает ошибку.
Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\*.xlsx" - выдает ошибку.
Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\*.*" - выдает ошибку.

То есть название файла нужно вводить! Мне же нужно, чтобы файл сохранялся под исходным именем автоматом.
Вообще-то, конечно, не проблема вручную скинуть на флешку. Но интересно решить эту, казалось бы, простую задачу.

Спасибо

Iska, Вам отдельное спасибо. Каждый раз вы приходите мне на помощь. Я два или три раза создавал темы.
megaloman, спасибо за приведенный листинг, но это чересчур сложно. Я надеялся на простое решение. Ваше решение сугубо профессиональное, а я - простой пользователь.

С уважением...

Последний раз редактировалось mastertm, 20-11-2020 в 09:35. Причина: Дописать благодарность


Отправлено: 09:32, 20-11-2020 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата mastertm:
Макрос сохранен в отдельной книге. Запускается файл с макросом, затем исходный файл, который становится активным. »
Файл с макросом имеет расширение .xlsm, исходный файл, например, "FIC_09.10.2020.xlsx", не может содержать макрос. Поэтому:
Цитата mastertm:
Из этого исходного файла запускается макрос, который производит форматирование содержимого »
этого не может быть. У Вас макрос с форматированием может быть только в файле с макросом с расширением .xlsm. Вот эта фраза:
Цитата mastertm:
а я - простой пользователь. »
с моей точки зрения - кокетство. Вы решаете задачу - здорово, но неверно выбрать путь решения, которое ни к чему не привёл и требовать от других ему следовать. Возьмите не мой листинг, а мою таблицу с макросами, подкорректируйте мои пути на свои, создайте тестовую исходную таблицу, убедитесь, что использовать оба макроса не составляет труда для "простой пользователь". Вам только надо вписать свою процедуру форматирования открытой исходной книги, которая после открытия становится активной.
Цитата Iska:
mastertm, упакуйте в архив всё, что у Вас сейчас есть, каковой приложите к сообщению. »
Прислушайтесь!

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:02, 20-11-2020 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Я после этого:
Цитата mastertm:
Запускается файл с макросом, затем исходный файл, который становится активным. Из этого исходного файла запускается макрос, »
перестал понимать кто на ком стоял где же макрос.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:07, 20-11-2020 | #6


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Цитата mastertm:
Создал макрос, который форматирует этот файл, сохраняет его и закрывает. Но понадобилось перед закрытием сохранить этот файл еще и на другой носитель (USB). »
Цитата mastertm:
Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\" - выдает ошибку.
Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\*.xlsx" - выдает ошибку.
Если запустить в виде: ActiveWorkbook.SaveAs "I:\ABC\*.*" - выдает ошибку. »
mastertm, сохранить копию файла под исходным именем, но по новому пути (флешка или просто папка бэекапа) в 2016 офисе успешно решается строчкой
Код: Выделить весь код
ActiveWorkbook.SaveAs "I:\ABC\" & ActiveWorkbook.Name
На заявленном 2010 проверяйте сами, возможно нужно добавить & ".xlsx" (в поиске проскакивает указание расширения, у меня все прекрасно работает и без него).
Цитата megaloman:
только в файле с макросом с расширением .xlsm. »
Ну строго говоря - xlsm, xls, xlsb, xla, xlam , хотя смысла это разумеется не меняет.
Цитата mastertm:
Из этого исходного файла запускается макрос »
Полагаю, это просто неточная фигура речи: я нахожусь в рабочем файле xlsx и вызываю, находясь в нем - "из него" - макрос (который хранится и в конечном итоге вызывается разумеется из стороннего xlsm файла).
Цитата megaloman:
с моей точки зрения - кокетство. »
megaloman, объективно говоря - код у Вас достаточно сложный , мне кажется, на первых шагах изучения VBA - неподъемный.

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:28, 21-11-2020 | #7


Новый участник


Сообщения: 28
Благодарности: 0

Профиль | Отправить PM | Цитировать


a_axe - браво!

Всем - здравствуйте!
Поподробнее обо всем. Каждый день скачиваю данные с десяти узлов с параметрами работы в виде файла .xlsx. Эти десять файлов нужно привести в читабельный вид. Для этого написал макрос:

Sub Macros1ALL()
'
' Macros1
'
For i = 1 To 10
' тут производится форматирование
ActiveWorkbook.Save
ActiveWindow.Close
Next i
End Sub

Сохраняю макрос и не забываю указать, что он находится в "Все открытые книги".
Запускаю файл с макросом, затем в проводнике выделяю все 10 файлов и нажимаю "Открыть".
Последний открытый файл становится "ActiveWindow". Из этого файла выбираю: Разработчик-Макросы-Macros1-Выполнить.
Все прекрасно работает, файлы сохраняются в той папке, откуда были вызваны . Проблема была в том, что нужно было сохранять эти файлы еще и на USB-диск.
Сегодня утром нашел (до того как зашел на форум - a_axe опередил): https://docs.microsoft.com/ru-ru/off...-network-drive
После этого макрос принял вид:

Sub Macros2GALL()
'
' Macros1
'
For i = 1 To 10

ActiveWorkbook.Save
MyFile = ActiveWorkbook.Name
ActiveWorkbook.SaveAs Filename:="I:\CG\KPR\" & MyFile
ActiveWindow.Close
Next i
End Sub

В своих поисках я исходил из следующего: не может быть, чтобы для выполнение такой рутинной операции было необходимо вызывать целую процедуру. Должен был быть более простой путь. Разработчики пакета Office не могли об этом не подумать!
Я скачал и исследовал несколько книг по VBA-программированию, но ни одна из них мне не помогла.
Зато помогли мне вы, мои друзья. Надеюсь, я могу Вас так назвать. Всем большое спасибо. Удачи!

Пожалуйста, научите напоследок как ставить благодарности.

С уважением...

Всех поблагодарил! Всем спасибо!

Отправлено: 09:39, 23-11-2020 | #8


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt я201123.xlsm.txt
(18.9 Kb, 6 просмотров)

mastertm, Вот вариант с возможностью выбора группы файлов (уберите только расширение txt), в макросе пропишите свои пути и вставьте свой код из макроса форматирования. Для удобства связал с макросом кнопку. Вы пишите:
Цитата mastertm:
затем в проводнике выделяю все 10 файлов »
Если в папке содержатся только те файлы, которые надо обработать, вообще можно написать загрузку всех этих файлов без Ваших лишних телодвижений в проводнике. А чтобы не путаться, я бы предложил перемещать обработанные файлы в другую, архивную папку. Можно сделать выбор указания пути для копирования на флэшку - вдруг её буковка изменилась. Лень - двигатель прогресса, эта рутина должна отрабатываться одной кнопкой. Развивайтесь, на вопросы по коду готов помогать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-11-2020 в 18:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:51, 23-11-2020 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


mastertm, лучше использовать не макрос, а внешний WSH/PoSH скрипт. Потом просто перетаскиваете из Проводника на скрипт/ярлык на скрипт Рабочую книгу — и всё.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:57, 23-11-2020 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - [решено] Сохранение Excel файла из макроса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - Экспорт таблицы из Excel в Word с помощью макроса Eiyb Программирование и базы данных 8 24-07-2020 08:09
2007 - [решено] Сохранение excel файла dzey Microsoft Office (Word, Excel, Outlook и т.д.) 2 12-09-2016 03:48
Разное - Как обратиться к закрытому файлу xls из макроса excel zion87 Microsoft Office (Word, Excel, Outlook и т.д.) 2 04-04-2013 08:52
Разное - Заполнение ячеек из формы макроса Excel zion87 Microsoft Office (Word, Excel, Outlook и т.д.) 7 03-04-2013 22:38
VBS/WSH/JS - Открытие htm файла в Excel'e и применение к нему макроса foxintel Скриптовые языки администрирования Windows 0 13-04-2010 03:40




 
Переход