Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отправка листа EXCEL по электронке - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Отправка листа EXCEL по электронке
k987 Дата: Вторник, 12.11.2013, 11:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Доброе утро! Я только-только начинаю изучать возможности VBA, и еще очень многого не понимаю. Поскольку в моей работе приходится пользоваться макросами, а ждать, пока кто-то решит все вопросы за меня, не хочется, пытаюсь постигать сию науку самостоятельно. Хотя получается пока слабо. Поэтому не судите строго, если вопрос глупый.
У меня Excel 2010. Ежедневно мне приходится по электронке отправлять в качестве отчета один лист из книги, содержащей очень много других листов. Поскольку в 10 версии потерялась возможность отправки отдельного листа, приходится лист копировать в новую книгу (при этом нарушается форматирование, приходится исправлять вручную), и уже эту книгу отправлять.
В интернете я нашла макрос, который, судя по описанию, должен такую проблему решить:
[vba]
Код
Sub SendSheet()
ThisWorkbook.Sheets("Лист1").Copy
With ActiveWorkbook
.SendMail Recipients:="name@yandex.ua", Subject:="итоговый отчет"
.Close SaveChanges:=False
End With
End Sub
[/vba]
Однако, если я запускаю макрос в таком виде, респондент получает пустую книгу с одним листом. Если я меняю название листа на мое, я получаю сообщение об ошибке.
По моим рассуждениям вроде бы все должно работать.
Когда я сама пытаюсь записать макрос, получается совсем другая версия, при выполнении которой все равно нужно вводить адрес респондента и т.д.
Как исправить ошибку в прилагаемом макросе, чтобы все работало правильно?
Заранее огромное спасибо
 
Ответить
СообщениеДоброе утро! Я только-только начинаю изучать возможности VBA, и еще очень многого не понимаю. Поскольку в моей работе приходится пользоваться макросами, а ждать, пока кто-то решит все вопросы за меня, не хочется, пытаюсь постигать сию науку самостоятельно. Хотя получается пока слабо. Поэтому не судите строго, если вопрос глупый.
У меня Excel 2010. Ежедневно мне приходится по электронке отправлять в качестве отчета один лист из книги, содержащей очень много других листов. Поскольку в 10 версии потерялась возможность отправки отдельного листа, приходится лист копировать в новую книгу (при этом нарушается форматирование, приходится исправлять вручную), и уже эту книгу отправлять.
В интернете я нашла макрос, который, судя по описанию, должен такую проблему решить:
[vba]
Код
Sub SendSheet()
ThisWorkbook.Sheets("Лист1").Copy
With ActiveWorkbook
.SendMail Recipients:="name@yandex.ua", Subject:="итоговый отчет"
.Close SaveChanges:=False
End With
End Sub
[/vba]
Однако, если я запускаю макрос в таком виде, респондент получает пустую книгу с одним листом. Если я меняю название листа на мое, я получаю сообщение об ошибке.
По моим рассуждениям вроде бы все должно работать.
Когда я сама пытаюсь записать макрос, получается совсем другая версия, при выполнении которой все равно нужно вводить адрес респондента и т.д.
Как исправить ошибку в прилагаемом макросе, чтобы все работало правильно?
Заранее огромное спасибо

Автор - k987
Дата добавления - 12.11.2013 в 11:50
SkyPro Дата: Вторник, 12.11.2013, 12:06 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Отправлять нужно только один лист?
Какой лист нужо отправлять?
Если на листе есть формулы, то нужно оставить только значения?
Отправка всегда на один и тот же адрес?

[vba]
Код
Sub SendSheet() ' отправляет активный лист
ActiveSheet.Copy
With ActiveWorkbook
.ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
.SendMail Recipients:="адресс@gmail.com", Subject:="итоговый отчет. " & .ActiveSheet.Name ' & .ActiveSheet.Name  можно удалить.
.Close SaveChanges:=False
End With
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Вторник, 12.11.2013, 12:13
 
Ответить
СообщениеОтправлять нужно только один лист?
Какой лист нужо отправлять?
Если на листе есть формулы, то нужно оставить только значения?
Отправка всегда на один и тот же адрес?

[vba]
Код
Sub SendSheet() ' отправляет активный лист
ActiveSheet.Copy
With ActiveWorkbook
.ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
.SendMail Recipients:="адресс@gmail.com", Subject:="итоговый отчет. " & .ActiveSheet.Name ' & .ActiveSheet.Name  можно удалить.
.Close SaveChanges:=False
End With
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 12.11.2013 в 12:06
k987 Дата: Вторник, 12.11.2013, 12:13 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Отправлять нужно всегда на один и тот же адрес, всегда один и тот же лист. На листе сводная таблица и еще несколько столбцов с формулами. Отправлять можно только значения, но в том же виде. какой и на исходном листе
 
Ответить
СообщениеОтправлять нужно всегда на один и тот же адрес, всегда один и тот же лист. На листе сводная таблица и еще несколько столбцов с формулами. Отправлять можно только значения, но в том же виде. какой и на исходном листе

Автор - k987
Дата добавления - 12.11.2013 в 12:13
_Boroda_ Дата: Вторник, 12.11.2013, 12:36 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ольга, у Вас все нормально в коде, кроме, разве что, того, что так он имя произвольного листа не съест. А вот если Вы напишете
[vba]
Код
ThisWorkbook.Sheets(33).Copy
'или
ThisWorkbook.Лист1.Copy
[/vba]
, где 33 - это порядковый номер листа, а Лист1 - это "кодовое имя" листа (посмотреть можно, нажав Альт F11 - вываливаемся в макросы; Контрл R - вываливаемся в окно VBAПроджект; там в скобочках мы видим обычное название листа (как в книге Excel), а перед скобками - другое (иногда совпадающее) - так вот оно-то нам и нужно.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеОльга, у Вас все нормально в коде, кроме, разве что, того, что так он имя произвольного листа не съест. А вот если Вы напишете
[vba]
Код
ThisWorkbook.Sheets(33).Copy
'или
ThisWorkbook.Лист1.Copy
[/vba]
, где 33 - это порядковый номер листа, а Лист1 - это "кодовое имя" листа (посмотреть можно, нажав Альт F11 - вываливаемся в макросы; Контрл R - вываливаемся в окно VBAПроджект; там в скобочках мы видим обычное название листа (как в книге Excel), а перед скобками - другое (иногда совпадающее) - так вот оно-то нам и нужно.

Автор - _Boroda_
Дата добавления - 12.11.2013 в 12:36
k987 Дата: Вторник, 12.11.2013, 12:55 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 91
Репутация: 0 ±
Замечаний: 0% ±

Спасибо, все работает!!!
 
Ответить
СообщениеСпасибо, все работает!!!

Автор - k987
Дата добавления - 12.11.2013 в 12:55
Baiden Дата: Понедельник, 16.05.2022, 15:35 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

Здравствуйте.
Не подскажите, почему не срабатывает удаление формул?
За ранее благодарю!

[vba]
Код
Option Explicit

Sub КаТЗ()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
    Dim objTmpMail As Object 'временное письмо для создания подписи
    'Шаг 2: Скопируйте рабочую таблицу, вставьте ее в новую книгу и 'сохраните ее
    Sheets("Отправка КАТЗ").Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\КаТЗ.xlsx"
        
    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 = ""    'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = "КаТЗ"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = ""    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
    sAttachment = ""    'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)

    'создаем сообщение
    With objMail
    .ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
        .ReadReceiptRequested = True 'прочтение
        .OriginatorDeliveryReportRequested = True 'доставка
        .Importance = 2 'Варианты (0-normal, 1-low, 2-high)
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .Body = sBody 'текст сообщения
        .HTMLBody = sBody & .HTMLBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        .Attachments.Add (ThisWorkbook.Path & "\КаТЗ.xlsx")   'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName
        'добавляем подпись к письму
        'создаем новое письмо
        Set objTmpMail = objOutlookApp.CreateItem(0)
        'отображаем его - у него появится подпись
        objTmpMail.Display
        'теперь к нашему текущему(рабочему) письму просто добавляем текст из временного
        objMail.Body = objMail.Body & objTmpMail.Body
        objTmpMail.Delete 'удаляем временное письмо

        .Display 'Display/Send, если необходимо просмотреть сообщение, а не отправлять без просмотра
    End With
    ActiveWorkbook.Close SaveChanges:=True
    Kill ThisWorkbook.Path & "\КаТЗ.xlsx"
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub
[/vba]
 
Ответить
СообщениеЗдравствуйте.
Не подскажите, почему не срабатывает удаление формул?
За ранее благодарю!

[vba]
Код
Option Explicit

Sub КаТЗ()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
    Dim objTmpMail As Object 'временное письмо для создания подписи
    'Шаг 2: Скопируйте рабочую таблицу, вставьте ее в новую книгу и 'сохраните ее
    Sheets("Отправка КАТЗ").Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\КаТЗ.xlsx"
        
    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 = ""    'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = "КаТЗ"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = ""    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
    sAttachment = ""    'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)

    'создаем сообщение
    With objMail
    .ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
        .ReadReceiptRequested = True 'прочтение
        .OriginatorDeliveryReportRequested = True 'доставка
        .Importance = 2 'Варианты (0-normal, 1-low, 2-high)
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .Body = sBody 'текст сообщения
        .HTMLBody = sBody & .HTMLBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        .Attachments.Add (ThisWorkbook.Path & "\КаТЗ.xlsx")   'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName
        'добавляем подпись к письму
        'создаем новое письмо
        Set objTmpMail = objOutlookApp.CreateItem(0)
        'отображаем его - у него появится подпись
        objTmpMail.Display
        'теперь к нашему текущему(рабочему) письму просто добавляем текст из временного
        objMail.Body = objMail.Body & objTmpMail.Body
        objTmpMail.Delete 'удаляем временное письмо

        .Display 'Display/Send, если необходимо просмотреть сообщение, а не отправлять без просмотра
    End With
    ActiveWorkbook.Close SaveChanges:=True
    Kill ThisWorkbook.Path & "\КаТЗ.xlsx"
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Baiden
Дата добавления - 16.05.2022 в 15:35
_Boroda_ Дата: Понедельник, 16.05.2022, 15:40 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
почему не срабатывает удаление формул?

Потому, наверное, что Вы их не удаляете в коде :D


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
почему не срабатывает удаление формул?

Потому, наверное, что Вы их не удаляете в коде :D

Автор - _Boroda_
Дата добавления - 16.05.2022 в 15:40
Baiden Дата: Понедельник, 16.05.2022, 15:51 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

[vba]
Код
.ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
[/vba]

Разве не оно?
 
Ответить
Сообщение[vba]
Код
.ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value ' удалить строку, если формулы нужны
[/vba]

Разве не оно?

Автор - Baiden
Дата добавления - 16.05.2022 в 15:51
_Boroda_ Дата: Понедельник, 16.05.2022, 15:52 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Оно. А в Вашем макросе оно где? Или я не заметил просто?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеОно. А в Вашем макросе оно где? Или я не заметил просто?

Автор - _Boroda_
Дата добавления - 16.05.2022 в 15:52
Baiden Дата: Понедельник, 16.05.2022, 15:53 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

После
[vba]
Код
'создаем сообщение
    With objMail
[/vba]

Я может не туда прописал?
 
Ответить
СообщениеПосле
[vba]
Код
'создаем сообщение
    With objMail
[/vba]

Я может не туда прописал?

Автор - Baiden
Дата добавления - 16.05.2022 в 15:53
_Boroda_ Дата: Понедельник, 16.05.2022, 15:55 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А, все, нашел
ВЫ удаляете на активном листе. А отсылаете файл КаТЗ.xlsx, который сохранили до этого

Между вот этими строками нужно писать уборку формул
Sheets("Отправка КАТЗ").Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\КаТЗ.xlsx"


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Понедельник, 16.05.2022, 15:55
 
Ответить
СообщениеА, все, нашел
ВЫ удаляете на активном листе. А отсылаете файл КаТЗ.xlsx, который сохранили до этого

Между вот этими строками нужно писать уборку формул
Sheets("Отправка КАТЗ").Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\КаТЗ.xlsx"

Автор - _Boroda_
Дата добавления - 16.05.2022 в 15:55
Baiden Дата: Понедельник, 16.05.2022, 15:59 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

Пробовал до этого.
Отхватываю это. :)
К сообщению приложен файл: 8176423.png (135.4 Kb)
 
Ответить
СообщениеПробовал до этого.
Отхватываю это. :)

Автор - Baiden
Дата добавления - 16.05.2022 в 15:59
_Boroda_ Дата: Понедельник, 16.05.2022, 16:02 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16714
Репутация: 6503 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Точку первую уберите


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТочку первую уберите

Автор - _Boroda_
Дата добавления - 16.05.2022 в 16:02
Baiden Дата: Понедельник, 16.05.2022, 16:02 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

Стоп!
Мой косяк. :)
Точку не убрал.
Благодарю за оперативность. :)
 
Ответить
СообщениеСтоп!
Мой косяк. :)
Точку не убрал.
Благодарю за оперативность. :)

Автор - Baiden
Дата добавления - 16.05.2022 в 16:02
Baiden Дата: Понедельник, 16.05.2022, 16:06 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

А не подскажите, где почитать, как убрать кнопки макросов?
 
Ответить
СообщениеА не подскажите, где почитать, как убрать кнопки макросов?

Автор - Baiden
Дата добавления - 16.05.2022 в 16:06
RAN Дата: Понедельник, 16.05.2022, 16:46 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЗдесь

Автор - RAN
Дата добавления - 16.05.2022 в 16:46
Baiden Дата: Понедельник, 16.05.2022, 17:41 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 20% ±

Спасибо участникам!
 
Ответить
СообщениеСпасибо участникам!

Автор - Baiden
Дата добавления - 16.05.2022 в 17:41
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!