Добрый вечер много уважаемые форумчане.... Прошу вас вновь о помощи Имеется код (который позволяет сохранить данные с таблицы в общий журнал на другой лист. При этом очищается таблица для внесения новых данных): [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОТГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..." End Sub
[/vba] Хотелось бы чтоб перед тем как он скопирует данные и перенесет их сформировал PDF файл данной таблицы (без его сохранения куда либо этот PDF "лишь для отправки на почту") и направил данный файл на электронный адрес (к примеру:a.anisimov@gradindustry.ru) проинформировал об этих действиях в виде предупреждения (чтоб оператор понимал что произошло и соглашался с действиями. И лишь потом уже сработал код который был указан выше. Наткнулся на тему КРОСС: My WebPage
Цитата
Способ 3. Универсальный макрос
пытался применить его к своей теме не удачно (((( потерялся в кодах. А также опасаюсь того что скорее всего не возможно будет в виду того что данные то скорее всего потеряются после того как переведешь в PDF и отправишь на почту (((( Помогите, пожалуйста или же объясните
Добрый вечер много уважаемые форумчане.... Прошу вас вновь о помощи Имеется код (который позволяет сохранить данные с таблицы в общий журнал на другой лист. При этом очищается таблица для внесения новых данных): [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОТГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..." End Sub
[/vba] Хотелось бы чтоб перед тем как он скопирует данные и перенесет их сформировал PDF файл данной таблицы (без его сохранения куда либо этот PDF "лишь для отправки на почту") и направил данный файл на электронный адрес (к примеру:a.anisimov@gradindustry.ru) проинформировал об этих действиях в виде предупреждения (чтоб оператор понимал что произошло и соглашался с действиями. И лишь потом уже сработал код который был указан выше. Наткнулся на тему КРОСС: My WebPage
Цитата
Способ 3. Универсальный макрос
пытался применить его к своей теме не удачно (((( потерялся в кодах. А также опасаюсь того что скорее всего не возможно будет в виду того что данные то скорее всего потеряются после того как переведешь в PDF и отправишь на почту (((( Помогите, пожалуйста или же объяснитеlebensvoll
[/vba] Где ActiveSheet.PageSetup.PrintArea - заданная область печати "C:\Книга1.pdf" - полный адрес и имя сохраняемого файла пдф
Далее отправляйте данный сохраненный файл почтой, после его удалите
С соседнего форума код на отправку (не знаю можно ли указать сайт)
[vba]
Код
Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Автоотправка" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Привет от Excel-VBA" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Temp\Книга1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With
Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub
[/vba] Где ActiveSheet.PageSetup.PrintArea - заданная область печати "C:\Книга1.pdf" - полный адрес и имя сохраняемого файла пдф
Далее отправляйте данный сохраненный файл почтой, после его удалите
С соседнего форума код на отправку (не знаю можно ли указать сайт)
[vba]
Код
Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Автоотправка" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Привет от Excel-VBA" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Temp\Книга1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With
Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook
Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\Дом\Downloads\Диспечерезация(2).pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents
MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..." End Sub
[/vba]
[vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook
Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\Дом\Downloads\Диспечерезация(2).pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents
MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..." End Sub
devilkurs, прошу меня простить, я сделал как вы мне сказали. Но в виду того что не могу проверить его работу так как дома уже (((( проверю завтра: сам код в предыдущем сообщении 1. Действия сохранения сработали и предупреждает (чтоб оператор мог решать согласен он на эти действия или же нет... :hands: 2. Дальше предупреждения также сработали перед отправкой и началась загрузка
Цитата
аутлука
а вот дальнейшие действия проверить не смог :'( Возник сразу же вопрос а вдруг случится так что у нас слител сервак (такое бывает) и пользоваться почтой нет возможности.
Цитата
Тогда оператор не сможет сохранить данные на другой лист в общий журнал реестра (так как не смог отправить почту).
По сути он его уже сохранил и если что сможет отправить его позже. Но данные то он должен будет сохранить в общий журнал, чтоб смог (не переживая) продолжить свою работу на других листах??? СПАСИБКИ ВАМ ОГРОМНЕЙШЕЕ
devilkurs, прошу меня простить, я сделал как вы мне сказали. Но в виду того что не могу проверить его работу так как дома уже (((( проверю завтра: сам код в предыдущем сообщении 1. Действия сохранения сработали и предупреждает (чтоб оператор мог решать согласен он на эти действия или же нет... :hands: 2. Дальше предупреждения также сработали перед отправкой и началась загрузка
Цитата
аутлука
а вот дальнейшие действия проверить не смог :'( Возник сразу же вопрос а вдруг случится так что у нас слител сервак (такое бывает) и пользоваться почтой нет возможности.
Цитата
Тогда оператор не сможет сохранить данные на другой лист в общий журнал реестра (так как не смог отправить почту).
По сути он его уже сохранил и если что сможет отправить его позже. Но данные то он должен будет сохранить в общий журнал, чтоб смог (не переживая) продолжить свою работу на других листах??? СПАСИБКИ ВАМ ОГРОМНЕЙШЕЕlebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Четверг, 08.09.2016, 19:45
devilkurs, СПАСИБО ОГРОМНЕЙШЕЕ все сработало на УРА :hands: Только прошу вас помочь, можно ли дополнить код еще одним действием??? Как удалить сохраненный файл после отправки??? [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\a.anisimov\Desktop\Диспечерезация(2).pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents
MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
End Sub
[/vba]
devilkurs, СПАСИБО ОГРОМНЕЙШЕЕ все сработало на УРА :hands: Только прошу вас помочь, можно ли дополнить код еще одним действием??? Как удалить сохраненный файл после отправки??? [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\a.anisimov\Desktop\Диспечерезация(2).pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents
MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
А также вопрос??? А как изменить название в сохранении PDF файла??? Сейчас он сохраняет его по наименованию файла (((( а хотелось бы по наименованию ЛИСТА
А также вопрос??? А как изменить название в сохранении PDF файла??? Сейчас он сохраняет его по наименованию файла (((( а хотелось бы по наименованию ЛИСТАlebensvoll
devilkurs, вроде бы все удачно получилось (можно сказать справился с вашими наставлениями) но с одним НО (((( В первую очередь данный файл при открытии аутлука не был приложен ((((( и можно сказать зависло (((( я отменил отправку. Вот мой код как я понял (если правильно конечно же) [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код сохранения Dim sAttachment As String sAttachment = "C:/Temp/" & ActiveSheet.Name & ".pdf" Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:/Temp/" & ActiveSheet.Name & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "e.tatchenkova@m-uptk.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:/Temp/" & ActiveSheet.Name & ".pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
q = MsgBox("Вы уверены что хотите удалить PDF файл из папки Temp???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If
End Sub
[/vba]
devilkurs, вроде бы все удачно получилось (можно сказать справился с вашими наставлениями) но с одним НО (((( В первую очередь данный файл при открытии аутлука не был приложен ((((( и можно сказать зависло (((( я отменил отправку. Вот мой код как я понял (если правильно конечно же) [vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код сохранения Dim sAttachment As String sAttachment = "C:/Temp/" & ActiveSheet.Name & ".pdf" Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:/Temp/" & ActiveSheet.Name & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "e.tatchenkova@m-uptk.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:/Temp/" & ActiveSheet.Name & ".pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
q = MsgBox("Вы уверены что хотите удалить PDF файл из папки Temp???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If
lebensvoll, Мой косяк ((((( не те слеши написал вместо [vba]
Код
"C:/Temp/"
[/vba] надо [vba]
Код
"C:\TEMP\"
[/vba]
И еще. Вы же один раз объявили в переменную sAttachment полный путь файла, далее по коду его и используйте. Я поправил. Только проверьте что после отработки макроса отправляется в письме файл. Вообще на сколько я знаю при добавлении файла в письмо аутлука, это файл копируется во временную папку аутлука, поэтому удаление созданного макросом файла не повлияет на отправку.
lebensvoll, Мой косяк ((((( не те слеши написал вместо [vba]
Код
"C:/Temp/"
[/vba] надо [vba]
Код
"C:\TEMP\"
[/vba]
И еще. Вы же один раз объявили в переменную sAttachment полный путь файла, далее по коду его и используйте. Я поправил. Только проверьте что после отработки макроса отправляется в письме файл. Вообще на сколько я знаю при добавлении файла в письмо аутлука, это файл копируется во временную папку аутлука, поэтому удаление созданного макросом файла не повлияет на отправку.devilkurs
If MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next
'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
sTo = "e.tatchenkova@m-uptk.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
'создаем сообщение With objMail .To = sTo 'адрес получателя .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With
Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
If MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11
'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1
'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
If MsgBox("Вы уверены что хотите удалить следующий PDF файл: " & sAttachment & " ???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If End Sub
[/vba]
[vba]
Код
Private Sub CommandButton5_Click() 'Код для сохранения данных на лист Журнал реестра на отгрузку
If MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код сохранения в ПДФ Dim sAttachment As String sAttachment = "C:\TEMP\" & Replace(ActiveSheet.Name, " ", "_") & ".pdf"
If MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next
'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
sTo = "e.tatchenkova@m-uptk.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Реестр на отгрузку" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам реестр на отгрузку" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
'создаем сообщение With objMail .To = sTo 'адрес получателя .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With
Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
If MsgBox("Вы уверены что хотите сохранить данные в ЖУРНАЛ РЕЕСТРА НА ОГРУЗКУ???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Реестр на отгрузку") As Long, lEndSheet_("Реестр на отгрузку") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Реестр на отгрузку")" и "shSheet_("журнал реестра на отгрузку")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Реестр на отгрузку") Set shSheett = Worksheets("журнал реестра на отгрузку") lStartSheet = 11
'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1
'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(11, 1), Cells(lEndSheet, 70)).ClearContents MsgBox "Данные перенесены на Лист Журнал реестра на отгрузку..."
If MsgBox("Вы уверены что хотите удалить следующий PDF файл: " & sAttachment & " ???", vbOKCancel) = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If End Sub
devilkurs, Данный код сработал и вы правы ошибка в /// а нужно \\\ но теперь данный код хотел применить к другому листу и когда он доходит до кода для сохранения в ПДФ (((( ругается (я так понимаю потому что у меня теперь стало две ОБЛАСТИ ПЕЧАТИ, возможно я ошибаюсь) но не могу что то либо исправить (((( [img][/img]
[vba]
Код
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок на транспор
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код сохранения Dim sAttachment As String sAttachment = "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf" Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Заявка на транспорт БЕТОМАКСУ" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам Заявку на автотранспорт" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в Общий журнал заявок на транспорт???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал заявок на транспорт Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Заявка на транспорт БЕТОМАКСУ") As Long, lEndSheet_("Заявка на транспорт БЕТОМАКСУ") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Заявка на транспорт БЕТОМАКСУ")" и "shSheet_("Общий журнал заявок на транспор")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Заявка на транспорт БЕТОМАКСУ") Set shSheett = Worksheets("Общий журнал заявок на транспор") lStartSheet = 10 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 11 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(5, 1), Cells(lEndSheet, 9)).ClearContents MsgBox "Данные перенесены на Лист Общий журнал заявок на транспорт..."
q = MsgBox("Вы уверены что хотите удалить PDF файл???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If
End Sub
[/vba]
ПОМОГИТЕ пожалуйста как поправить данную ошибку [img][/img]
devilkurs, Данный код сработал и вы правы ошибка в /// а нужно \\\ но теперь данный код хотел применить к другому листу и когда он доходит до кода для сохранения в ПДФ (((( ругается (я так понимаю потому что у меня теперь стало две ОБЛАСТИ ПЕЧАТИ, возможно я ошибаюсь) но не могу что то либо исправить (((( [img][/img]
[vba]
Код
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок на транспор
q = MsgBox("Вы уверены что хотите сохранить в PDF???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код сохранения Dim sAttachment As String sAttachment = "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf" Range(ActiveSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf", Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False
q = MsgBox("Вы уверены что хотите отправить сохраненный файл по почте???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для отправки данного файла на почту Outlook Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "a.anisimov@gradindustry.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = "Заявка на транспорт БЕТОМАКСУ" 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Здравствуйте направляю вам Заявку на автотранспорт" 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Users\a.anisimov\Desktop\" & ActiveSheet.Name & ".pdf" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName .Display 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True
q = MsgBox("Вы уверены что хотите сохранить данные в Общий журнал заявок на транспорт???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
'Код для сохранения данных в общий журнал заявок на транспорт Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Заявка на транспорт БЕТОМАКСУ") As Long, lEndSheet_("Заявка на транспорт БЕТОМАКСУ") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Заявка на транспорт БЕТОМАКСУ")" и "shSheet_("Общий журнал заявок на транспор")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Заявка на транспорт БЕТОМАКСУ") Set shSheett = Worksheets("Общий журнал заявок на транспор") lStartSheet = 10 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 1).Value = Empty Then 'Перносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 2 To 11 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(5, 1), Cells(lEndSheet, 9)).ClearContents MsgBox "Данные перенесены на Лист Общий журнал заявок на транспорт..."
q = MsgBox("Вы уверены что хотите удалить PDF файл???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий If Dir(sAttachment, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка" Else Kill sAttachment End If
End Sub
[/vba]
ПОМОГИТЕ пожалуйста как поправить данную ошибку [img][/img]lebensvoll
Матраскин, конечно есть что самое главное данный код раньше работал и все было хорошо на другом листе. Но когда я его начал применять к другому листу (((( то сначала он также работал а теперь (((( ругается (((( [img][/img]
Матраскин, конечно есть что самое главное данный код раньше работал и все было хорошо на другом листе. Но когда я его начал применять к другому листу (((( то сначала он также работал а теперь (((( ругается (((( [img][/img]lebensvoll
тогда я воообще ни чего не пойму (((( Я и говорю что у меня вчера все работало также и без проблем (((( единственная проблема возникла при сохранении данных на другой лист но это другая тема и я знаю что там нужно изменить но ругаться на сохранение активного листа не было (((( может комп перегрузить???
тогда я воообще ни чего не пойму (((( Я и говорю что у меня вчера все работало также и без проблем (((( единственная проблема возникла при сохранении данных на другой лист но это другая тема и я знаю что там нужно изменить но ругаться на сохранение активного листа не было (((( может комп перегрузить???lebensvoll