Страницы: 1
RSS
Отправка листа по электронной почте вложением с присвоением нужного имени файлу
 
Доброго времени суток. Есть макрос для отправка листа по электронной почте вложением (с данного сайта).
http://planetaexcel.ru/techniques/13/48/
Код
Sub SendSheet() 
   ThisWorkbook.Sheets(1).Copy 
   With ActiveWorkbook 
      .SendMail Recipients:="vasya@pupkin.com", _ 
         Subject:="Лови файлик" 
      .Close SaveChanges:=False 
   End With
End Sub 

Отлично работает - спасибо автору. Но создает вложения с названиями "Книга1", "Книга2", и т.д.

Вопрос есть ли возможность задавать имя файла?
Если есть - посоветуйте как.

Ответ, на данный вопрос, я на форуме не нашел, но если он есть, киньте ссылку, пожалуйста...  :)  

Спасибо.
 
Идей нет, кроме как сначала создать новую книгу из листа с заданным именем, а потом уж отсылать по почте эту книгу... :(
 
Чтобы дать имя файлу, необходимо его сначала куда-то сохранить. А потом удалить, если не нужен.
Код
Sub SendSheet() 
 ThisWorkbook.Sheets(1).Copy 
 With ActiveWorkbook 
 .SaveAs "C:\Другое имя.xls", xlNormal 'сохраняем под имененм Другое имя.xls в корень диска С
 .SendMail Recipients:="vasya@pupkin.com", _ 
 Subject:="Лови файлик" 
 .Close 0
 Kill "C:\Другое имя.xls" 'удаляем сохраненный файл
 End With 
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Sub SendSheet()
ThisWorkbook.Sheets(1).Copy

vbn = InputBox("Введите имя для книги")
   ActiveWorkbook.SaveAs Filename:="D:\отправка\" & vbn & ".xlsb"

With ActiveWorkbook
.SendMail Recipients:="vasya@pupkin.com", _
Subject:="Лови файлик"
.Close SaveChanges:=False
End With
End Sub
 
Идею понял, спасибо.
Вот, что получилось:

Sub SendSheet()

ThisWorkbook.Sheets(1).Copy
vbn = InputBox("Имя книги")
ActiveWorkbook.SaveAs Filename:="С:" & vbn & ".xlsb"
With ActiveWorkbook
.SendMail Recipients:="vasya@pupkin.com", _
Subject:="Лови файлик"

.Close 0
Kill "C:" & vbn & ".xlsb".xlsb" End With
End Sub

Но в выделеных красным строках - выдает ошибку. Пока не могу понять почему...
 
я за свой вариант. Работает в любой версии Excel. Второй же вариант(предложенный Dima S) будет работать только в версии 2007 и выше.
Плюс Вы как-то странно объединили коды. Почему два ".xlsb" после Kill?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дима проверку на существование забыл... Но все равно, он лучший.
Я сам - дурнее всякого примера! ...
 
Серега, я думаю проверка лишняя - мы ведь сами создаем именно там файл с заранее известным именем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Второй же вариант(предложенный Dima S) будет работать только в версии 2007 и выше
Так ведь они ж одинаковые)

Цитата
Но в выделеных красным строках - выдает ошибку. Пока не могу понять почему...
Во первых - из-за двойного ".xlsb", как сказал The_Prist, во вторых - в корне диска С нельзя сохранять файлы.
 
Заработало вот так:

Sub SendSheet()
ThisWorkbook.Sheets(1).Copy

vbn = InputBox("Введите имя для книги")
 ActiveWorkbook.SaveAs Filename:="D:\& vbn &.xls", FileFormat:=xlExcel8, _
       Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
       CreateBackup:=False

With ActiveWorkbook
.SendMail Recipients:="privet@mail.ru", _
Subject:="Лови файлик"
.Close 0
Kill "D:\& vbn &.xls"
End With
End Sub

Почему так сказать немогу - знаний ноль... освоил пока только метод тыка :)

Но вот проблема:
ActiveWorkbook.SaveAs Filename:="D:\& vbn &.xls", FileFormat:=xlExcel8, _
Не видит как переменную - имя файла получается таким & vbn &.xls

Подскажите как правильно записать? И желательно, что бы было вот так "Отчет за (переменная).xls" Тоесть, что бы часть названия файла была постоянной + дату вводил сам - "постоянная+переменная"
Извеняю, что закидал вопросами. Последний вопрос мог бы и сам найти, но время поджимает.
 
Цитата
Так ведь они ж одинаковые)
Они - это кто? 2003 и 2007? А почему тогда из 2003 нельзя напрямую(без доп.утилит) открыть файлы формата 2007 и выше?(.xlsx, xlsm,xlsb и т.д.)
Код
ActiveWorkbook.SaveAs Filename:="D:\" & vbn & ".xls", FileFormat:=xlExcel8

И оформляйте коды тегами, как это делают все.


Цитата
Dima S
в корне диска С нельзя сохранять файлы
Правда? Это откуда такая информация, что нельзя? Практичнее во временную папку пользователя, чтобы исключить ошибки кода при запуске кода пользователем с ограниченными правами. Но если есть админ права - никто не запрещает сохранять в корень любого диска.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Но вот проблема:
ActiveWorkbook.SaveAs Filename:="D:\& vbn &.xls", FileFormat:=xlExcel8, _
Не видит как переменную - имя файла получается таким & vbn &.xls

правильно так:
Цитата
ActiveWorkbook.SaveAs Filename:="D:" & vbn & ".xls"

Цитата
Они - это кто? 2003 и 2007?
- имел ввиду макросы. точнее способы сохранения и отправки. "xlsb" - это нюанс, который не углядел) я просто его всегда использую и как то не обратил внимания.

Цитата
Правда? Это откуда такая информация, что нельзя?
тоже относительно Windows7, которой пользуюсь.
В корне диска С можно создать только папки.
 
Цитата
тоже относительно Windows7, которой пользуюсь.
В корне диска С можно создать только папки.
с чего это вдруг?

...создавать - да; сохранять - любые файлы (и без папок)
Изменено: Михаил С. - 27.08.2013 15:49:52
 
Разобрался.
The_Prist и Dima S спасибо Вам огромное.
 
Михаил, не знаю) у меня и сохранять не дает.
По сути сохранение и создает файл, если его там раньше не было.
 
У меня тоже Win7 и все я могу сохранить. У Вас, наверное, контроль учетных записей слишком строго настроен.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх