Василька Пользователь Сообщений: 227 |
Добрый день, подскажите пожалуйста как можно методом перебора осуществить пересохранение всех файлов в выбранной директории (или на всем устройстве) с формата .xlsm в формат файла .xlsx? А также последующим удалением .xlsm. Ссылка Изменено: Василька — 09.08.2018 16:00:47 |
Ёк-Мок Пользователь Сообщений: 1775 |
Здравствуйте! Удивление есть начало познания © Surprise me! |
Василька Пользователь Сообщений: 227 |
Ёк-Мок, Да я хочу макросом запущенным из одного файла менять расширение файлов в директории указанной мною с формата .xlsm на формат .xlsx соответственно понимаю что все макросы в данных файлах будут удалены. Прикрепленные файлы
Изменено: Василька — 09.08.2018 16:23:51 |
Ёк-Мок Пользователь Сообщений: 1775 |
Так в чем вопрос-то? Что не работает? Что не получается? Внешне в Вашем файле все в ажуре. ps Зачем пересохранение в другом формате, если весь функционал удалит процедура «УдалениеМакросовИзКнигиEXCEL»? Ну и пусть будет пустой файл .xlsm. Удивление есть начало познания © Surprise me! |
Василька Пользователь Сообщений: 227 |
Вопрос в том как сделать чтобы макрос «УдалениеМакросовИзКнигиEXCEL» работал не только в той книге которой записан, а удалял макросы из директории методом перебора каждого файла. |
Ёк-Мок Пользователь Сообщений: 1775 |
Вариант Удивление есть начало познания © Surprise me! |
Василька Пользователь Сообщений: 227 |
Ёк-Мок, что-то не так видимо у меня, указал путь к папке, в которой 2 файла xlsm, нажал удалить макросы, вышла табличка что Готово, на самом деле изменений не было. |
Ёк-Мок Пользователь Сообщений: 1775 |
#8 10.08.2018 09:02:34 На моих файлах .xlsm макрос отрабатывает нормально.
Что напишет VBA после запуска? Изменено: Ёк-Мок — 10.08.2018 09:03:33 Удивление есть начало познания © Surprise me! |
||
Hugo Пользователь Сообщений: 23249 |
#9 10.08.2018 09:15:00
— зачем это написали? Будьте точны, а то ведь можно и так сделать |
||
Василька Пользователь Сообщений: 227 |
Попробовал ничего не изменилось, он считывает кол-во файлов в папке, и спрашивает «Продолжить?», после нажатия на кнопку «Да», сразы выходит msgBox «Готово» |
Василька Пользователь Сообщений: 227 |
#11 10.08.2018 09:19:39
Буду точным, открыть и сохранить файл с другим расширением и после этого удалить исходник с форматом .xlsm |
||
Василька Пользователь Сообщений: 227 |
Ребят я нашел решение, сторонний макрос задействовал (нашел на другом ресурсе готовую сборку) если можно, то могу выложить сюда «MulTEx» Изменено: Василька — 10.08.2018 09:32:41 |
Hugo Пользователь Сообщений: 23249 |
#13 10.08.2018 13:47:59
— буду придирчивым — тут нет точности. Например — открываем блокнотом (неважно зачем, просили), сохраняем с другим расширением Изменено: Hugo — 10.08.2018 14:52:15 |
||
sokol92 Пользователь Сообщений: 4445 |
#14 10.08.2018 14:37:15
Думаю, что Дмитрий Щербаков (автор надстройки) будет удивлен Владимир |
||
Alemox Пользователь Сообщений: 2183 |
#15 12.08.2018 22:10:47
Я думаю не будет удивлён. У нас целыми сайтами воруют и ничего за это ни кому не делают. В том числе и у меня, несколько лет назад весь сайт под копирку стырили. Бумажки на закрытие плагиата не помогли. Так и работает. А мой сайт закрыли за неуплату. Что тут говорить, весь мир на винде пиратской сидит. Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. |
||
Василька Пользователь Сообщений: 227 |
#16 13.08.2018 08:30:45 sokol92,
Ребят я с дружественного сайта её скачал и так полагаю там она была размещена с согласия автора. |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#17 13.08.2018 21:02:31
Что за сайт? |
||
Василька Пользователь Сообщений: 227 |
#18 14.08.2018 07:48:03
excel-vba.ru При установке на комп программа просит вашу почту для подтверждения и потом подписывает вас на новости с сайта. |
||
Vladimir Chebykin Пользователь Сообщений: 1224 |
#19 14.08.2018 08:00:43 Начиная отсюда
и досюда
очень забавный топик получился! |
||||
Василька Пользователь Сообщений: 227 |
#20 15.08.2018 08:16:30 Главное вопрос заданный в первом посте решен, а остальное не так важно) |
-
#2
The path is the critical part of this endeavor. The path takes you to the directory and then the rest is basic. Where you have more than one path, you could list the patn names in a column and then loop down the column to work them one at a time. Assume they are in column A of sheet 1.
Code:
For each c In Sheets(1).Range("A2:A4")
fPath = c,Value
If Right(fPath, 1) <> "" Then fPath = fPath & ""
fName = Dir(fPath & "*.xl*)
Do While fName <> ""
Set wb = Worksbooks.Open(fName)
SaveAs wb.Name & ".xlsb"
wb.Close False
fName = Dir
Loop
Next
-
#3
The path is the critical part of this endeavor. The path takes you to the directory and then the rest is basic. Where you have more than one path, you could list the patn names in a column and then loop down the column to work them one at a time. Assume they are in column A of sheet 1.
Code:
For each c In Sheets(1).Range("A2:A4") fPath = c,Value If Right(fPath, 1) <> "" Then fPath = fPath & "" fName = Dir(fPath & "*.xl*) Do While fName <> "" Set wb = Worksbooks.Open(fName) SaveAs wb.Name & ".xlsb" wb.Close False fName = Dir Loop Next
Thanks for the quick response JLG.
I’m a little perplexed as to how this works.
What is the FPath = c, Value saying?
To use one path as an example could we use the desktop?
-
#4
Basically I want to be able to create a path within the code
The lower case ‘c’ is a variable representing a cell object, in the case, From A2 thru A4 where it was assumed the file paths would have been listed for the various sources to find the files you want to open. The statemehnt fPath = c.Value is to assign the value of the cell in Column A to a variable with a name that identifies what it represents. c.Value could just as easily been used everywhere that fPath appears, but it might make it confusing to read the code if debugging is required. What the snippet that I posted does Is:
1. Creates a For…Next loop to walk down the designated cells in column A.
2. Assigns the current cell in Col A to the fPath variable
3. Checks for valid attenuation symbol in path and inserts one if needed.
4. Uses Dir function to assugn a file name to the fName variable
5. Starts Do Loop to
…a. Open a workbook with the path and file name previously identified (Notice that I forgot to inclued path here)
…b. Save the file with new extension
…c. Close the workbook that was just saved.
…d. get new file name for fName variable
6. Loop until all files in directory have been worked.
7. Loop to the next directory in column A.
Here is the corrected snippet:
Code:
For each c In Sheets(1).Range("A2:A4")
fPath = c,Value
If Right(fPath, 1) <> "" Then fPath = fPath & ""
fName = Dir(fPath & "*.xl*)
Do While fName <> ""
Set wb = Worksbooks.Open(fPath & fName)
SaveAs wb.Name & ".xlsb"
wb.Close False
fName = Dir
Loop
Next
Last edited: Dec 5, 2013
-
#5
The lower case ‘c’ is a variable representing a cell object, in the case, From A2 thru A4 where it was assumed the file paths would have been listed for the various sources to find the files you want to open. The statemehnt fPath = c.Value is to assign the value of the cell in Column A to a variable with a name that identifies what it represents. c.Value could just as easily been used everywhere that fPath appears, but it might make it confusing to read the code if debugging is required. What the snippet that I posted does Is:
1. Creates a For…Next loop to walk down the designated cells in column A.
2. Assigns the current cell in Col A to the fPath variable
3. Checks for valid attenuation symbol in path and inserts one if needed.
4. Uses Dir function to assugn a file name to the fName variable
5. Starts Do Loop to
…a. Open a workbook with the path and file name previously identified (Notice that I forgot to inclued path here)
…b. Save the file with new extension
…c. Close the workbook that was just saved.
…d. get new file name for fName variable
6. Loop until all files in directory have been worked.
7. Loop to the next directory in column A.
Here is the corrected snippet:Rich (BB code):
For each c In Sheets(1).Range("A2:A4") fPath = c,Value If Right(fPath, 1) <> "" Then fPath = fPath & "" fName = Dir(fPath & "*.xl*) Do While fName <> "" Set wb = Worksbooks.Open(fPath & fName) SaveAs wb.Name & ".xlsb" wb.Close False fName = Dir Loop Next
Thanks again for the reply JLG. I tried simply entering a path is cell A2:
C:UsershollandoDocumentsTest
Also, when I placed the code within the VBA Project there were two areas identified as a Syntax Error.
Code:
Sub Test()
For Each c In Sheets(1).Range("A2:A4")
[COLOR=#ff0000]fPath = c,Value[/COLOR]
If Right(fPath, 1) <> "" Then fPath = fPath & ""
[COLOR=#ff0000]fName = Dir(fPath & "*.xl*)[/COLOR]
Do While fName <> ""
Set wb = Worksbooks.Open(fPath & fName)
SaveAs wb.Name & ".xlsb"
wb.Close False
fName = Dir
Loop
Next
End Sub
Was there something I needed to change with thes two key areas?
-
#6
In the first one replace the comma with a dot. In the second one insert a double quote before the closing parenthesis.
-
#7
In the first one replace the comma with a dot. In the second one insert a double quote before the closing parenthesis.
Thanks Andrew!
One extra issue now.
I get a Compile error: ‘Sub or Function not defined’ this appears to stem from the
-
#8
That should be:
Rich (BB code):
wb.SaveAs wb.Name & ".xlsb"
-
#9
That should be:
Rich (BB code):
wb.SaveAs wb.Name & ".xlsb"
Excellent. We’re getting close.
Run-time error ‘1004’:
This extension can not be used with the selected file type. Change the file extension in the file name text box or select a different file type by change the Save as type.
-
#10
Try:
Code:
wb.SaveAs wb.Name & ".xlsb", FileFormat:=50
Сохранить как из xlsm в xlsx |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
In this Article
- Save Workbook – VBA
- Save a Specified Workbook
- Save the Active Workbook
- VBA Coding Made Easy
- Save the Workbook Where the Code is Stored
- Save all Open Workbooks
- Save all open workbooks that were not opened ReadOnly
- Save a workbook defined by a variable
- Save a workbook defined by a string variable
- Save a workbook defined by the order it was opened.
- Save a workbook based on a cell value
- Save As – VBA
- SaveAs Syntax:
- Save As Syntax Examples:
- Workbook Save As – Same Directory
- Workbook Save As – New Directory
- Workbook Save As – New Directory, Specify File Extension
- Workbook Save As – New Directory, Specify File Extension – Alt Method
- Workbook Save As – Add Password to Open File
- Workbook Save As – Add Password for Write Privileges
- Workbook Save As – Read-Only Recommended
- Other Save As Examples
- Create Save As Dialog Box
- Create Save As Dialog Box with Default File Name Provided
- Create Save As Dialog Box with Default File Name Provided
- Create & Save New Workbook
- Disable Save Alerts
This VBA Tutorial covers how to save a file using the Save and Save As commands in VBA.
Save Workbook – VBA
The VBA Save command saves an Excel file similarly to clicking the Save icon or using the Save Shortcut (CTRL + S).
Save a Specified Workbook
To save a workbook, reference the workbook object and use the Save command.
Workbooks("savefile.xlsm").Save
Save the Active Workbook
Note: This is the current active workbook from with in the VBA code, which is different from ThisWorkbook which contains the running code.
ActiveWorkbook.Save
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro – A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
Save the Workbook Where the Code is Stored
ThisWorkbook.save
Save all Open Workbooks
This will loop through all open workbooks, saving each one.
Dim wb as workbook
For Each wb In Application.Workbooks
wb.Save
Next wb
Save all open workbooks that were not opened ReadOnly
Note: opening a workbook in ReadOnly mode prevents the file from being saved.
To save the file you will need to use Save As and save the file with a different name.
Dim wb as workbook
For Each wb In Application.Workbooks
If not wb.ReadOnly then
wb.Save
End if
Next wb
Save a workbook defined by a variable
This will save a workbook that was assigned to a workbook object variable.
Dim wb as workbook
set wb = workbooks("savefile.xlsm")
wb.save
Save a workbook defined by a string variable
This will save a workbook that’s name was saved to a string variable.
Dim wbstring as string
wbstring = "savefile.xlsm"
workbooks(wbstring).save
Save a workbook defined by the order it was opened.
Note: The first workbook opened would have 1, the second 2, etc.
workbooks(1).save
VBA Programming | Code Generator does work for you!
Save a workbook based on a cell value
This will save a workbook that’s name is found in a cell value.
Dim wbstring as string
wbstring = activeworkbook.sheets("sheet1").range("wb_save").value
workbooks(wbstring).save
Save As – VBA
The VBA Save As command saves an Excel file as a new file, similar to clicking the Save As icon or using the Save As Shortcut (Alt > F > A).
Above, we identified all the ways to specify which workbook to save. You can use those exact same methods to identify workbooks when using Save As.
Save As behaves similarly to Save, except you also need to specify the name of the new file.
In fact, Save As has many potential variables to define:
SaveAs Syntax:
workbook object .SaveAs(FileName, FileFormat, Password, WriteResPassword, _
ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, _
AddToMru,TextCodepage, TextVisualLayout, Local)
A full description of all of the SaveAs arguments is included below. For now we will focus on the most common examples.
Note: These arguments can be entered as string with parenthesis or as defined variables.
Save As Syntax Examples:
Workbook Save As – Same Directory
ActiveWorkbook.SaveAs Filename:= "new"
or
ActiveWorkbook.SaveAs "new"
or
Dim wbstring as string
wbstring = "new"
ActiveWorkbook.SaveAs Filename:= wbstring
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Workbook Save As – New Directory
ActiveWorkbook.SaveAs Filename:= "C:new"
or
Dim wbstring as string
wbstring = "C:new"
ActiveWorkbook.SaveAs Filename:= wbstring=
Workbook Save As – New Directory, Specify File Extension
ActiveWorkbook.SaveAs Filename:= "C:new.xlsx"
or
Dim wbstring as string
wbstring = "C:new.xlsx"
ActiveWorkbook.SaveAs Filename:= wbstring
Workbook Save As – New Directory, Specify File Extension – Alt Method
You can also specify the file format in it’s own argument.
.xlsx = 51 '(52 for Mac)
.xlsm = 52 '(53 for Mac)
.xlsb = 50 '(51 for Mac)
.xls = 56 '(57 for Mac)
ActiveWorkbook.SaveAs Filename:= "C:new", FileFormat:= 51
Workbook Save As – Add Password to Open File
ActiveWorkbook.SaveAs Filename:= "C:new.xlsx", Password:= "password"
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Workbook Save As – Add Password for Write Privileges
If correct password is not supplied then workbook opens as Read-Only
ActiveWorkbook.SaveAs Filename:= "C:new.xlsx", WriteRes:= "password"
Workbook Save As – Read-Only Recommended
TRUE to display a message box, recommending that the file is opened read-only.
ActiveWorkbook.SaveAs Filename:= "C:new.xlsx", ReadOnlyRecommended:= TRUE
Other Save As Examples
Create Save As Dialog Box
This Generates the Save As Dialog Box, prompting the user to Save the file.
Keep in mind that this simple code may not be appropriate in all cases.
Application.GetSaveAsFilename
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Create Save As Dialog Box with Default File Name Provided
Application.GetSaveAsFilename InitialFilename:="test.xlsx"
Create Save As Dialog Box with Default File Name Provided
Application.GetSaveAsFilename InitialFilename:="test.xlsx"
Create & Save New Workbook
This will create a new workbook and immediately save it.
Dim wb As Workbook
Set wb = Workbooks.Add
Application.DisplayAlerts = False
wb.SaveAs Filename:=”c:Test1.xlsx”
Application.DisplayAlerts = True
Disable Save Alerts
As you work with saving in VBA, you may come across various Save Warnings or Prompts. To disable warnings, add this line of code:
Application.DisplayAlerts=False
and to re-able alerts:
Application.DisplayAlerts=True
Создание файлов Excel методами Workbooks.Add, Worksheet.Copy и текстовых файлов с помощью оператора Open и метода CreateTextFile из кода VBA Excel. Создание документов Word рассмотрено в отдельной статье.
Метод Workbooks.Add
Описание
Файлы Excel можно создавать из кода VBA с помощью метода Add объекта Workbooks.
Workbooks.Add – это метод, который создает и возвращает новую книгу Excel. Новая книга после создания становится активной.
Ссылку на новую книгу Excel, созданную методом Workbooks.Add, можно присвоить объектной переменной с помощью оператора Set
или обращаться к ней, как к активной книге: ActiveWorkbook
.
Синтаксис
Workbooks.Add (Template)
Template – параметр, который определяет, как создается новая книга.
Значение Template | Параметры новой книги |
---|---|
Отсутствует | Новая книга с количеством листов по умолчанию. |
Полное имя существующего файла Excel | Новая книга с указанным файлом в качестве шаблона. |
xlWBATChart | Новый файл с одним листом диаграммы. |
xlWBATWorksheet | Новый файл с одним рабочим листом. |
Примеры
Пример 1
Создание новой книги Excel с количеством листов по умолчанию и сохранение ее в папку, где расположен файл с кодом VBA:
Sub Primer1() ‘Создаем новую книгу Workbooks.Add ‘Сохраняем книгу в папку, где расположен файл с кодом ActiveWorkbook.SaveAs (ThisWorkbook.Path & «Моя новая книга.xlsx») ‘Закрываем файл ActiveWorkbook.Close End Sub |
Файл «Моя новая книга.xlsx» понадобится для следующего примера.
Пример 2
Создание новой книги по файлу «Моя новая книга.xlsx» в качестве шаблона с присвоением ссылки на нее объектной переменной, сохранение нового файла с новым именем и добавление в него нового рабочего листа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub Primer2() ‘Объявляем объектную переменную с ранней привязкой Dim MyWorkbook As Workbook ‘Создаем новую книгу по шаблону файла «Моя новая книга.xlsx» Set MyWorkbook = Workbooks.Add(ThisWorkbook.Path & «Моя новая книга.xlsx») With MyWorkbook ‘Смотрим какое имя присвоено новому файлу по умолчанию MsgBox .Name ‘»Моя новая книга1″ ‘Сохраняем книгу с новым именем .SaveAs (ThisWorkbook.Path & «Моя самая новая книга.xlsx») ‘Смотрим новое имя файла MsgBox .Name ‘»Моя самая новая книга» ‘Добавляем в книгу новый лист с именем «Мой новый лист» .Sheets.Add.Name = «Мой новый лист» ‘Сохраняем файл .Save End With End Sub |
Метод Worksheet.Copy
Описание
Если в коде VBA Excel применить метод Worksheet.Copy без указания параметра Before или After, будет создана новая книга с копируемым листом (листами). Новая книга станет активной.
Примеры
Пример 3
Создание новой книги с помощью копирования одного листа (в этом примере используется книга, созданная в первом примере):
Sub Primer3() ‘Если книга источник не открыта, ее нужно открыть Workbooks.Open (ThisWorkbook.Path & «Моя новая книга.xlsx») ‘Создаем новую книгу копированием одного листа Workbooks(«Моя новая книга.xlsx»).Worksheets(«Лист1»).Copy ‘Сохраняем новую книгу с именем «Еще одна книжица.xlsx» в папку, ‘где расположен файл с кодом ActiveWorkbook.SaveAs (ThisWorkbook.Path & «Еще одна книжица.xlsx») End Sub |
Также, как и при создании нового файла Excel методом Workbooks.Add, при создании новой книги методом Worksheet.Copy, можно ссылку на нее присвоить объектной переменной.
Пример 4
Создание новой книги, в которую включены копии всех рабочих листов из файла с кодом VBA:
Sub Primer4() ThisWorkbook.Worksheets.Copy End Sub |
Пример 5
Создание новой книги, в которую включены копии выбранных рабочих листов из файла с кодом VBA:
Sub Primer5() ThisWorkbook.Sheets(Array(«Лист1», «Лист3», «Лист7»)).Copy End Sub |
Создание текстовых файлов
Оператор Open
При попытке открыть несуществующий текстовый файл с помощью оператора Open, такой файл будет создан. Новый файл будет создан при открытии его в любом режиме последовательного доступа, кроме Input (только для чтения).
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Primer6() Dim ff As Integer, ws As Object ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Создаем новый текстовый файл путем открытия ‘несуществующего в режиме чтения и записи Open ThisWorkbook.Path & «Мой-новый-файл.txt» For Output As ff ‘Записываем в файл текст Write #ff, «Этот файл создан при его открытии оператором « & _ «Open по несуществующему адресу (полному имени).» ‘Закрываем файл Close ff ‘Открываем файл для просмотра Set ws = CreateObject(«WScript.Shell») ws.Run ThisWorkbook.Path & «Мой-новый-файл.txt» Set ws = Nothing End Sub |
В имени текстового файла пробелы заменены дефисами (знаками минус), так как метод Run объекта Wscript.Shell не способен открывать файлы с именами, содержащими пробелы.
Рекомендую открывать файлы для просмотра методом ThisWorkbook.FollowHyperlink. Пример и преимущества этого метода в статье VBA Excel. Открыть файл другой программы.
Метод FileSystemObject.CreateTextFile
Для создания нового текстового файла из кода VBA Excel по указанному имени, можно использовать метод CreateTextFile объекта FileSystemObject.
Пример
Sub Primer7() Dim fso, fl, ws ‘Создаем новый экземпляр объекта FileSystemObject Set fso = CreateObject(«Scripting.FileSystemObject») ‘Присваиваем переменной fl новый объект TextStream, ‘связанный с созданным и открытым для записи файлом Set fl = fso.CreateTextFile(ThisWorkbook.Path & «Еще-один-текстовый-файл.txt») ‘Записываем в файл текст fl.Write («Этот текстовый файл создан методом CreateTextFile объекта FileSystemObject.») ‘Закрываем файл fl.Close ‘Открываем файл для просмотра Set ws = CreateObject(«WScript.Shell») ws.Run ThisWorkbook.Path & «Еще-один-текстовый-файл.txt» End Sub |
Стоит отметить, что новый текстовый файл может быть создан и с помощью метода OpenTextFile объекта FileSystemObject при условии присвоения параметру create значения True.