Макрос сохранения файла с определенным именем

Макрос сохранения файла с определенным именем

61 просмотра

1 ответ

32 Репутация автора

Итак, у меня есть макрос, который создает каталог, переименовывает вложение и сохраняет его работающим по правилу при поступлении сообщений в Outlook. Проблема в том, что 3 письма приходят с адресами

123 главная улица, город 1
456 главная улица, город 2
789 главная улица город 3

Он сохранит их в соответствующих папках и назовет файл соответствующим образом на основе адреса, но когда вы войдете в файлы, все они будут иметь одинаковую информацию, поэтому он сохраняет вложение для адреса 456 main st как все 3 имена файлов.

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

Спасибо за вашу помощь заранее!

Отредактировано, чтобы предоставить больше информации:

Итак, письма будут иметь это в теле:

• Адрес: 123 главная ул., Город, штат 12345-1234

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

Правило, которое работает, говорит

Примените это правило после того, как сообщение поступит
от admin@email.com
и с EagleView в теме
и с $ в теле
и на этом компьютере, только
переместите его
и запустите Project1.SaveEagleView

Ответы (1)

плюса

14254 Репутация автора

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

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

Также очень важно —

Options

  • Во Editor вкладке проверьте Require Variable Declaration .
  • Это будет размещать Option Explicit в верхней части каждого нового модуля и заставлять вас объявлять каждую переменную перед использованием.

    В вашем коде было 6 необъявленных переменных. Неправильное написание переменной приведет к тому, что будет создана новая, а старая сохранит старое или нулевое значение, что приведет к дальнейшему беспорядку, возможно, без сообщения об ошибке.

    Редактировать:
    я не уверен, как вы заставляете скрипт работать с правилом, так как ему передан аргумент.
    Я бы сделал это, наблюдая за папкой и запуская скрипт, когда электронное письмо перемещается в эту папку (либо вручную, либо по правилу).

    Добавьте этот код, ThisOutlookSession и он вызовет SaveEagleView процедуру, передав ей электронное письмо, которое было перемещено в папку.
    Вы , возможно , придется изменить MailItem в SaveEagleView имени процедуры в Object .
    Первая строка должна быть в самом верху модуля — перед любыми процедурами.

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

    Для использования этого макроса на любом листе в книге Excel создайте кнопку, и назначьте ей макрос СохранитьЛистВФайл.

    При запуске макроса (нажатии кнопки) будет выведено диалоговое окно выбора имени для сохраняемого файла, после чего текущий лист будет сохранён под заданным именем в выбранной папке.

    Сохранение производится в формате XLS (формат Excel 2003)
    Если пользователь отказался от ввода имени файла (нажал клавишу ESC или кнопку «Отмена» в диалоговом окне),
    то сохранения листа в файл не происходит.

    PS: Кто-то может сказать, что для сохранения листа в файл в объектной модели Excel есть метод SaveAs, применимый к объекту Worksheet.

    Но, как ни странно, выполнение кода ActiveSheet.SaveAs " " приводит к сохранению книги целиком, что равносильно использованию кода ActiveWorkbook.SaveAs " "

    Читайте также:  Вай фай плюс что это

    Почему этот метод сохранения работает так нелогично — лично мне не понятно (видимо, Microsoft что-то там перемудрил)

    • 150993 просмотра

    Комментарии

    Спасибо. Разобрался. Нашёл ошибки в библиотеках.)

    Спасибо. Всё запустил, но не работает. Пишет не найден проект или библиотека. Простите, не уточнил, поменял ещё саму систему (был XP стал Win7 x64).
    Вот мой код:
    Private Sub CommandButton2_Click()
    On Error Resume Next
    Const REPORTS_FOLDER = "C:Users. . . "
    MkDir ThisWorkbook.Path & "" & REPORTS_FOLDER
    ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "" & REPORTS_FOLDER
    FileName = [b8] & "_" & [b6] & "_" & [b4] & "_" & Format([b2], "DDMMMMYY") & "_" & [c2] & ".xlsx"
    Err.Clear: Worksheets(Array(. ", ". ")).Copy: DoEvents
    If Err Then Exit Sub
    If ActiveWorkbook.Worksheets.Count = 2 And ActiveWorkbook.Path = "" Then
    ActiveWorkbook.SaveAs FileName, xlWorkbookNormal
    ActiveWorkbook.Close False
    End If
    End Sub

    Убедитесь, что макросы вообще включены в настройках Excel.
    Перед запуском файла с макросами, необходимо выполнить следующее:

    > найти файл с макросами в папке
    > щелкнуть правой кнопкой мыши на файле — Свойства — Разблокировать — ОК
    > и только после этого запускать

    Перешёл с 2007 на Office 2016, перестали работать макросы. И этот. (((

    Добрый день, подскажите, пожалуйста, что надо изменить в макросе, чтобы:
    1. Он копировал не весь лист целеком, а только диапазон ВИДИМЫХ ячеек (A1:L50), т.к. этот диапазон только часть отфильтрованного списка.
    2. Он копировал только значения, без формул ячеек.

    Здравствуйте, Алексей
    Да, можно такое сделать, — могу написать макрос под заказ.

    Здравствуйте, Игорь.
    Подскажите, пожалуйста, возможно ли такое, чтобы Лист можно было сохранять не единожды (по имени в одной ячейке) а сославшись на какой-либо диапазон ячеек. Есть потребность сделать в конкретной папке количество файлов соответствующее количеству дней в месяце(отчет на каждый день). Если в диапазоне ячеек указать даты месяца и по нажатию макрос сохранял бы, файлы с именем Даты.

    Можете написать макрос под заказ? Мне надо до понедельника

    Напишите ваши контакты, есть несколько задач.

    Дмитрий, можем сделать вам макрос под заказ.
    Оформляйте заказ, прикрепляйте файл (в который надо встроить макрос), и подробно описывайте, что куда в каком виде и под каким именем сохранять.

    Дело в том, что в книге порядка 20-30 листов и каждый лист необходимо сохранить в отдельные папки, соответствующие имени листа.

    Дмитрий, а куда уж проще-то. вы нажимаете одну кнопку «Печать», и получаете готовый файл JPG
    Зачем ещё-то упрощать.
    Можно, конечно, и макрос под заказ написать
    Если в формат BMP (или EMF) картинку сохранять — то макрос несложный, если в формат JPG — то макрос сложнее будет (и дороже)
    Но я бы на вашем месте не стал изобретать велосипед, а оставил бы все как есть.

    Сохраняю листы в JPEG формате, при помощи виртуального принтера "universal document converter" возможно ли упростить процедуру сохранения активного листа?

    Здравствуйте, Игорь. Будьте любезны, взгляните на код. Основная часть была взята с другого сайта, часть с Вашего. Суть такая: на первом листе исходные данные и кнопка, на третьем — расчеты с формулами. Необходимо чтобы при нажатии кнопки создавалась папка "Двери" в текущей папке, где лежит этот файл (а если она есть, то сохранялось в нее), а имя файла бралось с листа 1 из ячеек a17 & b17. Сохраняться должен третий лист (он скрыт), формулы на нем заменить на значения. После сохранения новая книга закрывается и выводится сообщение об удачном сохранении файла с именем из ячеек a17 & b17. Сам я методом тыка пытался воплотить это, но лист не хочет сохраняться с указанным именем (используется имя по умолчанию "Книга 2. Книга 3. ). Также непонятно мне как сделать чтобы выскакивало сообщение о результате сохранения. Подскажите пожалуйста.

    Читайте также:  Как настроить обс для слабых компьютеров

    On Error Resume Next
    Const REPORTS_FOLDER = "Двери"
    ‘ название подпапки, в которую по-умолчанию будет предложено сохранить файл

    MkDir ThisWorkbook.Path & "" & REPORTS_FOLDER
    ‘ создаём папку для файла, если её ещё нет

    ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "" & REPORTS_FOLDER
    ‘ выбираем стартовую папку

    Filename = Range("a17") & ("b17") & ".xls"
    ‘ вывод диалогового окна для запроса имени сохраняемого файла

    If VarType(Filename) = vbBoolean Then Exit Sub
    ‘ если пользователь отказался от выбора имени файла — отменяем сохранение листа в файл

    Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n

    Select Case Sheets(1).[Условие]
    Case 1
    Ar = Array(3)
    Case Else
    End Select

    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1)
    For Each Sh In ThisWorkbook.Worksheets
    ArAll(n) = Sh.Index
    n = n + 1
    Next
    ThisWorkbook.Worksheets(ArAll).Copy
    Application.Volatile
    Application.Calculate
    Application.ScreenUpdating = False
    For Each n In Ar
    With ActiveWorkbook.Worksheets(n).UsedRange.Cells
    .Value = .Value
    End With
    Next
    Erase ArAll: n = 0
    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count — 1 — (UBound(Ar) + 1))
    For Each Sh In ActiveWorkbook.Worksheets
    If IsError(Application.Match(Sh.Index, Ar, 0)) Then
    ArAll(n) = Sh.Index
    n = n + 1
    Else: If Sh.Visible = False Then Sh.Visible = True
    End If
    Next
    ActiveWorkbook.Sheets(Ar(0)).Activate
    Application.DisplayAlerts = False
    ActiveWorkbook.Worksheets(ArAll).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Application.Dialogs(xlDialogSaveAs).Show

    ActiveWorkbook.Close False
    End Sub

    Dim WB As Workbook
    Dim ind As Integer
    ind = ActiveSheet.Index
    Application.DisplayAlerts = False
    Set WB = Workbooks.Add
    Dim li As Long
    Application.DisplayAlerts = False
    ind = 3
    For n = ind To 2 Step -1
    ThisWorkbook.Sheets(n).Copy Before:=WB.Sheets(1)
    Next

    pdfFilename = Application.DefaultFilePath & Application.PathSeparator & "имя файла" & Range("D9").Value & ".pdf"
    WB.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=pdfFilename, OpenAfterPublish:=False

    При этом файл создается с названием "имя файла.pdf" начисто игнорируя содержимое ячейки указанной.

    Вот макрос, который сохраняет без ограничения 255-ти символов в ячейке:

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

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Как перенести данные с айфона на макбук

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Ссылка на основную публикацию
    Люстра с пультом управления светодиодная инструкция
    Идея установить и подключить люстру с пультом замечательна тем, что хозяева квартиры получают возможность управлять освещением, не привязываясь к выключателю....
    Линза для лазерного диода
    Асферические линзы используются для коррекции сферических аберраций. Вместо применения сложных линз такие аберрации могут быть снижены до минимума при использовании...
    Линукс для нетбука acer aspire one
    Автор — Андрес Брачо (Andrés Bracho) Я не технарь, не компьютерщик и не программист. Я всего лишь среднестатис-тический пользователь, кото-рый...
    Ля рош позе скидки
    12 актуальных предложений март 2020 Сэкономьте 10% с промокодом при покупке более 3000 рублей Приобретите в интернет-магазине La Roche Posay...
    Adblock detector