Сохранение файла excel с помощью макроса

Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.

Содержание

  1. Исходные данные
  2. Сохранение файла Excel с названием из ячейки — с привязкой к этой ячейке
  3. Добавление кнопки в Excel для запуска макроса
  4. Сохранение файла Excel с названием из ячейки — без привязки к ячейке
  5. Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Исходные данные

Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.

Примечание! Я использую Excel 2013.

Скриншот 2

В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.

Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.

Заметка! Этапы разработки программы – как создаются и проектируются программы?

Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.

Ниже представлен код процедуры, я его подробно прокомментировал. Единственное скажу, что я во всех примерах сохраняю новые файлы без макросов (расширение .xlsx), т.е. по факту будет один файл с поддержкой макросов, а все производные — без.

Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.

Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.

Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Получаем значение ячейки
   CellValue = Range("B14")

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   'Сообщение с результатом выполнения процедуры
   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

  End Sub

После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).

В результате в моем случае процедура успешно выполнилась, файл сохранился с названием «Марка Авто 1», данное значение взято из ячейки B14, о чем будет свидетельствовать сообщение в конце процедуры. Файл сохранен в каталоге, где и исходный файл (во всех примерах ниже прописано то же самое, т.е. сохранение рядом с исходником, но это Вы можете изменить).

Скриншот 3

Заметка! Статический анализ кода в теории и на практике.

Добавление кнопки в Excel для запуска макроса

Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».

Скриншот 4

Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».

Скриншот 5

Курс по SQL для начинающих

В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.

Скриншот 6

Заметка! ТОП 7 популярных языков программирования.

Сохранение файла Excel с названием из ячейки — без привязки к ячейке

Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).

Замените код процедуры следующим кодом, который совсем немного, но изменен.

  
   Sub SaveFile()

  'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).

Скриншот 7

Как видим, все отработало.

Сохранение файла Excel с названием, которое сформировано из значений двух ячеек

Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.

В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.

Код процедуры в данном случае будет выглядеть следующим образом.

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка значения ячеек B14 и D14
   If Range("B14").Value = "" Or Range("D14").Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Складываем значения из двух ячеек B14 и D14
   CellValue = Range("B14").Value & " - " & Range("D14").Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Запускаем макрос.

Скриншот 8

Все ОК, файл создан.

Заметка! Как измерить сложность кода программы при программировании?

Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.

Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.

Код процедуры

   
   Sub SaveFile()

   'Объявление переменных
   Dim CellValue As String
   Dim Path As String
   Dim FinalFileName As String

   'Временно отключаем показ вспомогательных сообщений
   Application.DisplayAlerts = False

   'Задаём каталог сохранения файла (в данном случае текущий каталог)
   Path = ThisWorkbook.Path & ""

   'Проверка номера столбца
   If ActiveCell.Column <> 2 Then
     MsgBox "Указан некорректный столбец", vbCritical, "Ошибка!"
     Exit Sub
   End If

  'Проверка значения ячейки
   If ActiveCell.Value = "" Then
     MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!"
     Exit Sub
   End If

   'Получаем значение активной ячейки
   CellValue = ActiveCell.Value

   'Смещаемся на 2 столбца, относительно активной ячейки
   ActiveCell.Offset(0, 2).Select

   'Складываем значения из двух ячеек
   CellValue = CellValue & " - " & ActiveCell.Value

   'Формируем итоговый путь и название файла
   FinalFileName = Path & CellValue

   'Сохраняем файл
   ActiveWorkbook.SaveAs FileName:=FinalFileName, _
                      FileFormat:=xlOpenXMLWorkbook
                      'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом

   'Включаем вывод сообщений
   Application.DisplayAlerts = True

   MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат"

   End Sub

Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.

Заметка! Опрос. Какой операционной системой Вы пользуетесь?

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Сохранение файла рабочей книги Excel, существующего или нового, с помощью кода VBA. Методы Save и SaveAs объекта Workbook, параметр SaveChanges метода Close.

Сохранение существующего файла

Сохранить существующий открытый файл рабочей книги Excel из кода VBA можно несколькими способами. В примерах используется выражение ActiveWorkbook, которое может быть заменено на ThisWorkbook, Workbooks(«ИмяКниги.xlsx»), Workbooks(myFile.Name), где myFile — объектная переменная с присвоенной ссылкой на рабочую книгу Excel.

Простое сохранение файла после внесенных кодом VBA Excel изменений:

Сохранение файла под другим именем (исходная рабочая книга будет автоматически закрыта без сохранения внесенных изменений):

ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx»

Сохранить файл рабочей книги можно перед закрытием, используя параметр SaveChanges метода Close со значением True:

ActiveWorkbook.Close SaveChanges:=True

Чтобы закрыть файл без сохранения, используйте параметр SaveChanges метода Close со значением False:

ActiveWorkbook.Close SaveChanges:=False

Сохранение файла под другим именем при закрытии рабочей книги:

ActiveWorkbook.Close SaveChanges:=True, Filename:=«C:ТестоваяНоваяКнига.xlsx»

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

Новая книга сохраняется с указанием полного имени:

Workbooks.Add

ActiveWorkbook.SaveAs Filename:=«C:ТестоваяНоваяКнига.xlsx»

После этого к новой книге можно обращаться по имени: Workbooks ("НоваяКнига.xlsx").

Если не указать полное имя для сохраняемого файла:

Workbooks.Add

ActiveWorkbook.Save

тогда новая книга будет сохранена с именем и в папке по умолчанию, например: Книга1.xlsx, Книга2.xlsx, Книга3.xlsx и т.д. в папке «Документы».


Microsoft Excel offers Visual Basic for Application (VBA) as a scripting tool to let you add additional functionality to your Excel spreadsheets. You can use VBA to prompt the user to enter a filename for an Excel spreadsheet and then save the file where the user has indicated.

In newer versions of Excel, you can use JavaScript scripting to achieve similar functionality.

Understanding VBA for Excel 

VBA is a scripting language that’s supported by the Microsoft Office suite of productivity software, including the word processing program Microsoft Word and Microsoft Excel, the suite’s spreadsheet program. Microsoft provides extensive documentation for the functionality that is accessible through VBA.

It’s related to other versions of the Basic and Visual Basic programming language, although it has its own distinct syntax and set of features you can access, particularly as it relates to scripting the Microsoft Office programs. You can embed macros, or short programs, into Microsoft Office files for yourself and your colleagues to work with. They can be used to tweak the user interface in Excel and Word and to automate features, such as copying and pasting text.

These macros are separate from Excel formulas, which are used to automatically compute results in a spreadsheet cell based on values in other cells.

VBA and Security Concerns

Keep in mind that if you write code in VBA and embed it in an Excel or Word file, the file will get a distinct extension indicating that it contains macro code. For security reasons, other users and users on other computers may have to approve the code to run before it will function.

In some cases, depending on settings, you may not be able to run the code at all or the file may be flagged by antivirus software and you won’t be able to install it.

If someone sends you a file that you don’t expect to have macro code or you receive a file with macro code from an unexpected source, do not allow the macro code to run until you verify it was written and sent to you by someone you trust, since it could damage files on your computer.

Setting Up the Developer Toolbar

Before you can access the scripting interface in Microsoft Excel, you must enable it. To do so, click the «File» tab on the ribbon menu, then click «Options» to enable the «Options» dialog box. Click «Customize Ribbon» in the left portion of the box, and then select «Popular Commands» under the «Choose commands from» label.

Then, on the right side of the dialog box, select «Main Tabs» in the «Customize the Ribbon» dropdown list and check the box next to the word «Developer.» Click the «OK» button.

The «Developer» tab will now appear on your ribbon menu. From there, you can click the «Visual Basic» button to see the embedded macro code in your spreadsheet.

Adding «Save» Button in Excel  

If you want to add a VBA save as button in Excel, you can do so using the «Developer» tab in the ribbon menu. Make sure you have enabled it by customizing the ribbon, and then click the «Insert» button; under «ActiveX Controls,» click the word «Button.»

Then, click in your spreadsheet where you want the button to appear. Next, in the «Controls» group of the ribbon menu’s «Developer» tab, click «View code.» Select the button’s name in the left dropdown menu and the word «Click» in the right dropdown menu to edit the code that will be executed when you click on the button.

Here, you can add code for your «Save As» button to show the familiar prompt that will enable users to choose a location to store the spreadsheet.

Excel VBA and «Save As»

To give an Excel macro «Save As» functionality, you can use the Excel VBA GetSaveAsFilename function. This is part of the «Application» group of functions, since it is part of Excel’s core functionality.

Assign the result of the operation to a variable with a line like «filename = Application.GetSaveAsFileName()». When the code is run, a «Save As» dialog box will pop up, defaulting to the name of the current file.

You can specify an argument to the function called InitialFileName to indicate another default filename, use an argument called Title to customize the title on the dialog box, and use the FileFilter and FilterIndex options to specify a list of file types, such as Excel spreadsheets or text files, and the index within the list of the one you wish to use as a default.

When you select a folder and enter a file name to save the file with, the function will return the file path. If you close or cancel out of the dialog box, it will return «False.»

Accessing an Excel Workbook

Logically, you’ll likely want your Excel VBA SaveAs button to actually save the file using the file path that the user provided rather than just discarding that name. You can use the SaveAs method on a workbook object to do so. Remember that a workbook is just another name for a Microsoft Excel spreadsheet file.

To access the current workbook the user is working in, use the variable ActiveWorkbook. To get an already open workbook by filename, use the Workbooks method, such as by calling up Workbooks («filename.xls»).

Saving the Workbook

Once you have your workbook, you can call the SaveAs method on it using the filename that the user provided through the dialog box, such as by calling «ActiveWorkbook.SaveAs Filename:=filename». You can also pass other parameters to this function, such as the file format to use for the file, which could be a Windows or Mac text file, a Windows or Mac comma-separated value file or a traditional Excel file.

Other parameters allow you to indicate whether to add the file to the list of recently used files and whether to require a password, which you can specify with the method, to interact with the file. You may wish to prompt the user or otherwise indicate if you wish to set a password so you don’t make the file impossible to open.

Saving the File in Place

While an Excel macro for Save as can be useful if you want to prompt a user to enter a new filename, there are also times where you will simply want to save the Excel spreadsheet with its existing filename.

To do this, use the Save method on the workbook without any arguments. For example, you can call ActiveWorkbook.Save to save the active workbook. You can also iterate through the Application.Workbooks variable using a for loop to save each open workbook.

You may wish to notify users when you intend to save open workbooks, either by including a dialog box or a message within the spreadsheet, so that colleagues are not surprised that their work has been written to disk.

Styling Your Excel VBA Button

You may want to style and label buttons you create in Excel VBA to stand out. To do so, click the «Developer» tab in the ribbon menu and then click the «Design Mode» toggle button to turn design mode on.

Select the button you want to configure and design by clicking it with you mouse, and then click «Properties» within the «Controls» group of the «Developer» tab of the ribbon menu. Alternatively, right-click the button and click «Properties» with design mode enabled.

Within the properties menu, you can configure options like the «Caption» that is displayed on the button, which you may want to set to something like «Save As,» as well as the font settings used to display the text on the button. You can also configure whether the button has an image displayed on it and what type of cursor icon will appear when you move your mouse over it.

It’s also possible to configure whether it will appear when you print the spreadsheet. Configure the button so that you think it will be clear to users of the spreadsheet what it does, taking into account your organization’s usual font and styling preferences.

Using the Default Save As

While it may occasionally be useful to trigger a SaveAs dialog menu with the click of a button within your spreadsheet, it’s usually not necessary, because a SaveAs button is already built in to Microsoft Excel.

To access it, click the «File» menu in Microsoft Excel and then click «Save As.» Choose where you want to save the file on your cloud storage or on your local computer, and use the «Save as type» dropdown menu to choose which file format you want to use to store the file.

Use the «File name» box to indicate a name for the file, and click the «Save» button when you are satisfied.

Using the JavaScript API

Newer versions of Microsoft Office also enable scripting with JavaScript, a programming language commonly used for implementing interactive functionality on the web.

So far, saving functionality is only available in a public preview version of the scripting tool. You can save the file by calling the Workbook.save method, similar to the functionality in VBA. Call Workbook.save with the parameter Excel.SaveBehavior.save to indicate that you want to save the file in its existing place; use the argument Excel.SaveBehavior.prompt if you want to prompt the user on where to save the file for the first time.

Note that if the user cancels the Save menu, the method will throw an exception.

Using Google Apps Script

If you’re using Google Sheets instead of Microsoft Excel, you can still write code to script interactive elements and automated functionality in your spreadsheets. The code will be written in a version of JavaScript known as Google Apps Script that has access to Google applications like Google Docs, Google Sheets and Gmail.

If you want to create and populate a spreadsheet with a particular name in Google Sheets, you can use the «SpreadsheetApp.create» method, which takes the spreadsheet’s designed name as an argument and will return the web address of the new spreadsheet. If you pass it the name and a number of rows and a number of columns, such as SpreadsheetApp.create(«MySpreadsheet», 20, 5), it will create a new spreadsheet with those specifications.

Compatibility Between Software Tools

Note that the scripting languages included with various word processing and spreadsheet tools are largely incompatible with those from other makers. If you send someone a Microsoft Excel sheet with VBA code that they open with LibreOffice Calc, Apple Numbers or Google Sheets, it is very likely that the VBA code embedded in the sheet simply will not run on the other program.

Take this factor into consideration if you are exchanging files with people using different spreadsheet or word processing software.

Skip to content

На чтение 3 мин. Просмотров 2.9k.

Что делает макрос:  Этот макрос защищает от случайного закрытия файла перед сохранением. Он гарантирует, что Excel автоматически сохранит файл перед закрытием.

Excel обычно предупреждает пользователей, которые пытаются закрыть не сохраненную книгу, давая им возможность сохранить перед закрытием. Тем не менее, многие пользователи могут пропустить это предупреждение, случайно нажать кнопку «Нет».

С этим макросом Вы защитите свой файл от невнимательных пользователей.

Содержание

  1. Как это работает
  2. Код макроса
  3. Как работает этот код
  4. Как использовать

Как это работает

Этот код запускается событием рабочей книги (BeforeClose- перед закрытием). При нажатии на кнопку Закрыть срабатывает событие и запускается макрос. Суть кода проста — он запрашивает у пользователя, действительно ли он хочет закрыть книгу

Как сохранить файл в Excel перед закрытием

Макрос затем проверяет какую кнопку нажал пользователь ОК или Отмена. Оценка производится с помощью конструкции Select Case. Оператор Select Case является альтернативой в If … Then … Else, что позволяет выполнять проверки условий ваших макросов (обычно используется для большого количества условий).

Код макроса

Private Sub Workbook_BeforeClose(Cancel
As Boolean)Выведем сообщение с "ОК" или "Отмена"
Select Case MsgBox("Сохранить и закрыть?",vbOKCancel)
'Если нажал "Отмена", закрываем окно
Case Is = vbCancel
Cancel=True
'Если нажал "Да", то сохраняем книгу
Case Is=vbOK
ActiveWorkbook.Save
'Завершаем проверку, закрываем Select Case
End Select
End Sub

Как работает этот код

Давайте подробно рассмотрим каждую строчку кода

  1. На шаге 1 мы активируем окно c сообщением, где в качестве проверки используем оператор Select Case. Здесь мы используем аргумент vbOKCancel, чтобы на формочке отображались кнопки ОК и Отмена.
  2. Если пользователь нажал кнопку Отмена в окне сообщения, макрос говорит Excel: «Не выходим! Закрой событие!». Это делается путем присвоения переменной Cancel свойства True
    (Верно). Если пользователь нажал кнопку OK в окне сообщений, п. 3 вступает в силу.
  3. Здесь мы говорим Excel: «Сохранить книгу!». Здесь мы не пишем Cancel = True, поэтому событие успешно завершается.
  4. На шаге 4, мы просто закрываем Оператор Select Case.

Как использовать

Для реализации этого макроса, Вам нужно скопировать и вставить его в код события Workbook_BeforeClose. Размещение макроса здесь позволяет запускать макрос непосредственно перед закрытием excel-файла.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига.
  3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code.
  4. В левой части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open (можете позже удалить его за ненадобностью)
  5. В правом выпадающем списке свойство BeforeClose

 

evgeniy_m

Пользователь

Сообщений: 109
Регистрация: 07.07.2014

#1

01.09.2014 23:36:22

Всем доброе время суток! Есть макрос, после обработки которого вылетает окно с сохранением (имя файла берется автоматически с ячейки «А31» ;) :

Код
Имя_для_сохранения = [A31]
    FName = Application.GetSaveAsFilename(InitialFileName:=Имя_для_сохранения, _
                                          FileFilter:="Excel Files (*.xls), *.xls", _
                                          Title:="Выберите имя файла для сохранения")
    If VarType(FName) <> vbBoolean Then ThisWorkbook.SaveAs FName

НО..
как переписать макрос, чтобы файл сохранялся автоматически (без подтверждения кнопки: «Сохранить» ;)  в папку откуда открыт файл?
Заранее спасибо.

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

#2

02.09.2014 02:26:10

Код
sub ggg()
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "" & [A31].Value & ".xls"
end sub
 

evgeniy_m

Пользователь

Сообщений: 109
Регистрация: 07.07.2014

 

socha

Пользователь

Сообщений: 13
Регистрация: 05.10.2014

Здравствуйте.
К продолжению эмой темы.
Надобно сохранить файл под именем ячейки А1, но и папка сохранения должна выбираться автоматически по ячейки А1. То есть путь сохранения C:Заказы «Имя конечной папки А1» «названия файла А1.xls.
Спасибо

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#5

05.10.2014 17:23:12

socha пишет:

Цитата
сохранить файл под именем ячейки А1, и папка сохранения должна выбираться автоматически по ячейки А1

Так это-ж ещё проще

Код
ActiveWorkbook.SaveAs Filename:=[A1].Value & ".xls" 

Согласие есть продукт при полном непротивлении сторон.

 

socha

Пользователь

Сообщений: 13
Регистрация: 05.10.2014

В оригинале у меня место сохранения файла C:РаботаПродажаКлиентыА1″Папка клиента, имя которой совпадает с ячейкой А1.
Но в этой ячейке я указываю не весь путь, а только имя последней папки.  
Спасибо

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#7

05.10.2014 17:37:42

Цитата
socha пишет: в этой ячейке я указываю…имя последней папки

а имя файла где указываете? Тоже в это-же ячейке (см пост #4)?

Согласие есть продукт при полном непротивлении сторон.

 

socha

Пользователь

Сообщений: 13
Регистрация: 05.10.2014

#8

05.10.2014 17:46:10

Вот по такому примеру нужно сделать макрос. Подставил свои параметры — все работает, только место сохранения, тоже должно быть переменное по указаной ячейке

Код
Sub Макрос1() 
Dim a$, d$ 
a = Cells(1, 1) 'a1 name 
d = Cells(2, 1) 'a2 data 
ActiveWorkbook.SaveAs Filename:= _ 
"C:" & a & d & ".xls" 
End Sub

Спасибо

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

#9

05.10.2014 17:51:45

Вы же практически все сделали

Код
ActiveWorkbook.SaveAs Filename:="C:" & a & "" & d &  ".xls" 

Согласие есть продукт при полном непротивлении сторон.

 

socha

Пользователь

Сообщений: 13
Регистрация: 05.10.2014

Спасибо, все заработало. Просто не мог разобраться с синтаксисом

 

vlasssov71

Пользователь

Сообщений: 13
Регистрация: 23.09.2014

#11

05.10.2014 19:52:33

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

Код
Public Function УбратьСимволыИмяФайла(s)

s = Replace(s, ".", "_")
s = Replace(s, "/", "_")
s = Replace(s, "", "_")
s = Replace(s, Chr(34), "_")

УбратьСимволыИмяФайла = s

End Function 
 

athe

Пользователь

Сообщений: 15
Регистрация: 18.06.2015

#12

19.06.2015 10:38:54

Добрый день.
Вижу что тема не очень свежая, но авось…)
Использую формулу товарища k61 (спасибо ему большое):

Код
sub ggg()
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "" & [A31].Value & ".xls"
end sub

К сожалению есть одно неудобство, данный код делает копию файла с указанным в ячейке названием и переходит в эту копию, закрывая изначальный файл. Может есть  у кого код, который делал бы копию файла, не открывая его и не закрывал бы первичный файл?
Заранее благодарен.
С ув. athe.

Изменено: athe19.06.2015 10:41:32

 

The_Prist

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#13

19.06.2015 10:49:13

Код
ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "" & [A31].Value & ".xls"

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

athe

Пользователь

Сообщений: 15
Регистрация: 18.06.2015

The_Prist
Большое спасибо.
Стыд мне и позор… Пошёл дальше читать Слепцову)).

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

#15

12.04.2016 15:58:04

Цитата
The_Prist написал:
19 Июн 2015 10:49:13

Код
ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "" & [A31].Value & ".xls"
Код
ThisWorkbook.SaveCopyAs "C:Folder" & NewName

в цикле For..Next выдает ошибку:
Run-time error ‘-2147417848 (80010108)’:
Automation error
The object invoked has disconnected from its clients.

Имя файла NewName изменяется в цикле:

Код
NewName = "Saved_" & x & ".xlsm" 'x - изменяемый циклом параметр

В чем причина может быть? (DoEvents — не помогает).

Изменено: RNEtidi12.04.2016 16:37:05

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

RNEtidi, зачем цитируете всё подряд? Даже подпись. На чём хотели сделать акцент? Кнопка цитирования не для ответа.
И код следует оформлять соответствующим тегом — видели, как у других это выглядит? Ищите такую кнопку и исправьте своё сообщение в части цитаты и оформления. Спасибо!

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

#17

12.04.2016 16:36:25

Цитата
RNEtidi написал: В чем причина может быть?

— да хоть в том, что уже выше озвучивалось — в недопустимом имени файла.

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

Hugo

, в моем случае в чем недопустимость имени файла?

 

Юрий М

Модератор

Сообщений: 60588
Регистрация: 14.09.2012

Контакты см. в профиле

Никто не видит, что у Вас в ячейке, из которой берётся имя файла )) Чему равна переменная х?

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

#20

12.04.2016 17:00:09

Код
For x=1 to n 'n - берется из текстбокса формы: n = Val(Textbox1.Text)
NewName = "Saved_" & x & ".xlsm" 'x - изменяемый циклом параметр
DoEvents
ThisWorkbook.SaveCopyAs "C:Folder" & NewName
Next x

x — изменяемый циклом параметр

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

#21

12.04.2016 17:17:29

Цитата
Юрий М написал: Чему равна переменная х?
 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

ну для начала x = 1. Потом x = 2. И так далее до n. К примеру n = 5, тогда x изменяется от 1 до 5. Цикл For..Next так работает.

 

Hugo

Пользователь

Сообщений: 23257
Регистрация: 22.12.2012

Сорри, подслеповат вероятно… :)
Тогда должно работать без ошибок, если запись в каталог разрешена.

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

запись в каталог не запрещена, но ошибка все равно выскакивает.

 

Фродо

Пользователь

Сообщений: 348
Регистрация: 10.03.2016

#25

12.04.2016 19:16:43

Цитата
RNEtidi написал:
но ошибка все равно выскакивает.

уникальность имени?

у меня простая версия Экселя, в ней нет кнопки «Прочитать мысли и сгенерировать файл пример»

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

#26

12.04.2016 19:18:37

Цитата
RNEtidi написал:
Run-time error ‘-2147417848 (80010108)’:
Automation error
The object invoked has disconnected from its clients.
 

Фродо

Пользователь

Сообщений: 348
Регистрация: 10.03.2016

#27

12.04.2016 19:23:15

для начало попробуйте все убрать.

Код
ThisWorkbook.SaveCopyAs "C:Folder" & "Saved_" & 1 & ".xlsm"

у меня простая версия Экселя, в ней нет кнопки «Прочитать мысли и сгенерировать файл пример»

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

в этом то вся и прелесть: вне цикла все хорошо сохраняет. а в теле цикла при попытке сохранить выскакивает вышеназванная ошибка и excel напрочь зависает.

 

Фродо

Пользователь

Сообщений: 348
Регистрация: 10.03.2016

#29

12.04.2016 20:02:38

Код
ThisWorkbook.SaveCopyAs "C:Folder" & NewName true

а так попробуйте

файл пример сделайте

у меня простая версия Экселя, в ней нет кнопки «Прочитать мысли и сгенерировать файл пример»

 

RNEtidi

Пользователь

Сообщений: 12
Регистрация: 12.04.2016

#30

12.04.2016 21:49:14

для чего писать true после имени файла?
пример прикрепил. Одну копию сохраняет, а на второй выдает ошибку.

Прикрепленные файлы

  • Example.xlsm (17.4 КБ)

Изменено: RNEtidi12.04.2016 22:35:42
(Перезалил файл. Новый файл пишет log)

Понравилась статья? Поделить с друзьями:
  • Сохранение текстовым редактором word или writer документа с типом файла rtf приведет к созданию файл
  • Сохранение информации в объединяемых ячейках excel
  • Сохранение текстовым редактором word или writer документа в файлах типа pdf производится для чего
  • Сохранение измененного текста word
  • Сохранение табличных документов 1с в excel