Ребята, большое Вам спасибо за помощь, то что нужно, с Вашей помощью достиг желаемаго результата, сделал как написал Владимир С.
Дмитрий(The_Prist) Щербаков, в начале сам пытался по указанному Вами примеру переделать код под себя, но желаемаго результата не достиг, и прошлось сюда обратиться. Еще раз большое спасибо. По этой теме вопрос у меня исчерпан.
При тестировании выявился такой недочет. При отправки письма, все данные расположены в столбик, а нужно как на листе в excel,данные с ячейки C4, должны быть рядом с ячейкой B4, и с C5 рядом с B5.
Добрый день! Ребята на просторах интернета нашел такой файл, но проблема в том, что могу отправлять данные только с одного первого листа, при попытке отправить данные со второго листа, данные отправляются с первого листа. Пожалуйста помогите подправить код, чтобы с каждого листа отправлялись свои данные через один код. Благодарю!
Скрытый текст
Код
Sub Send_Mail()
Dim oOutlApp As Object, objMail As Object
Dim sTo As String, sSubject As String, sBody As String, sTblBody As String, sAttachment As String
Dim rDataR As Range
Dim IsOultOpen As Boolean
Application.ScreenUpdating = False
'Пробуем подключиться к Outlook
On Error Resume Next
Set oOutlApp = GetObject(, "Outlook.Application")
If Err = 0 Then
IsOultOpen = True
Else
Err.Clear
Set oOutlApp = CreateObject("Outlook.Application")
End If
oOutlApp.Session.Logon
Set objMail = oOutlApp.CreateItem(0) 'создаем новое сообщение
'если не получилось создать приложение или экземпляр сообщения - выходим
If Err.Number <> 0 Then Set oOutlApp = Nothing: Set objMail = Nothing: Exit Sub
With ActiveWorkbook.Sheets("Лист 1")
sTo = .Range("B2").Value
sSubject = .Range("B3").Value
sBody = .Range("B4").Value
sAttachment = .Range("").Value
'Переносы строк и шрифт
sBody = Replace(sBody, Chr(10), "<br />")
sBody = Replace(sBody, vbNewLine, "<br />")
sBody = "<span style=""font-size: 14px; font-family: Arial"">" & sBody & "</span>"
'Таблица
'важно добавлять таблицу после оформления переносов строк и шрифта
'в противном случае форматирование таблицы может "поплыть"
Set rDataR = .Range("") 'Selection - если надо отправить только выделенные диапазона
sTblBody = ConvertRngToHTM(rDataR)
'подменяем метку {TABLE} в тексте письма реальной таблицей(сформированной выше)
sBody = Replace(sBody, "{TABLE}", sTblBody)
End With
'создаем сообщение
With objMail
.To = sTo 'адрес получателя
' .CC = "" 'адрес для копии
' .BCC = "" 'адрес для скрытой копии
.Subject = sSubject 'тема сообщения
.BodyFormat = 2 'olFormatHTML - формат HTML
' .Body = RangeToTextTable(Selection) 'вставляем таблицу без форматирования
.HTMLBody = sBody
If sAttachment <> "" Then
.Attachments.Add sAttachment
End If
.display 'если необходимо просмотреть сообщение, а не отправлять без просмотра
'.Send 'если необходимо отправить сообщение без просмотра
End With
If IsOultOpen = False Then oOutlApp.Quit
Set oOutlApp = Nothing: Set objMail = Nothing
DoEvents
End Sub
Function ConvertRngToHTM(rng As Range)
Dim fso As Object, ts As Object
Dim sF As String, resHTM As String
Dim wbTmp As Workbook
sF = Environ("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'переносим указанный диапазон в новую книгу
rng.Copy
Set wbTmp = Workbooks.Add(1)
With wbTmp.Sheets(1)
'вставляем только ширину столбцов, значения и форматы
.Cells(1).PasteSpecial xlPasteColumnWidths
.Cells(1).PasteSpecial xlPasteValues
.Cells(1).PasteSpecial xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False
'удаляем все объекты(фигуры, рисунки и пр.)
'------------------------------------------
'если рисунки и объекты нужны - удалить этот блок
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
'------------------------------------------
End With
'выставляем русскую кодировку (если кириллицы в тексте нет - можно убрать)
wbTmp.WebOptions.Encoding = msoEncodingCyrillic
'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код)
With wbTmp.PublishObjects.Add( _
SourceType:=xlSourceRange, Filename:=sF, _
Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address(1, 1, Application.ReferenceStyle), _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'открываем созданный файл как текстовый и считываем содержимое
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2)
resHTM = ts.ReadAll
ts.Close
'выравниваем таблицу по левому краю(если надо оставить по центру - удалить эту строку)
ConvertRngToHTM = Replace(resHTM, "align=center x:publishsource=", "align=left x:publishsource=")
'закрываем временную книгу и удаляем
wbTmp.Close False
Kill sF
'очищаем объектные переменные
Set ts = Nothing: Set fso = Nothing
Set wbTmp = Nothing
End Function
Function RangeToTextTable(rng As Range)
Dim lr As Long, lc As Long, arr
Dim res As String, rh()
Dim lSpaces As Long, s As String
arr = rng.Value
If Not IsArray(arr) Then
ReDim arr(1 To 1, 1 To 1)
arr(1, 1) = rng.Value
End If
ReDim rh(1 To UBound(arr, 2))
For lr = 1 To UBound(arr, 1)
For lc = 1 To UBound(arr, 2)
If Len(arr(lr, lc)) > rh(lc) Then
rh(lc) = Len(arr(lr, lc))
End If
Next
Next
For lr = 1 To UBound(arr, 1)
For lc = 1 To UBound(arr, 2)
s = arr(lr, lc)
lSpaces = rh(lc) - Len(s)
If lSpaces > 0 Then
s = s & Space(lSpaces)
End If
If lc = 1 Then
res = res & s
Else
res = res & vbTab & s
End If
Next
res = res & vbNewLine
Next
RangeToTextTable = res
End Function
Добрый день! Ребята,пытался отредактировать код этого файла чтобы отправлять заданный диапазон A2:D6 на листе. пример смотрел здесь, но не получается, выдает ошибку. Получатель должен видеть такое же расположение строк, как и у отправителя. Благодарю.
Добрый вечер! Ребята, я тоже пользуюсь этим файлом, и при пользовании появились два вопроса: 1. Текст письма пишется только в ячейки B5, а как можно добавить ячейки, чтобы текст письма отправлялся например и с ячейки B7,B8,C7,C8. 2. Когда в ячейки пишу данный в столбик, примерно 3-4 строки, а получатель получает все в одной строке. Как можно исправить, чтобы как отправлял так и получал получатель письма. Благодарю.
Kuzmich, Я не против кнопочки и макросов, меня это устраивает, но мой бухгалтер, которая пришла в декабре 2013 года, диктует свои условия, ее это не устраивает. Она то и заставила меня переделывать, даже кнопочка обновления в сводной таблице запретила. Вот и пришлось переделывать программу, пять раз сдавал отчет, и то через знакомых с подарком. Сдаем мы в электронном виде, сам файл Excel, и ей нужно, чтобы информация сразу отображалась, другое не принимает. Поэтому и настойчиво прошу сделать без макросов, для нее, а для себя соответственно делаю с макросами. Поэтому, поймите меня правильно, и помогите, пожалуйста, так как она хочет.
Цитата
применить его не возможно
Да, но я не с полной информацией выложил файл. Столбцы A,G,M,W, тоже будут содержать формулы, но с другого листа. Иными словами в журнале отображаются база данных приход и база данных расход. С формулами БД приход, у меня решено, формулы те же, что и в расходе, но для расхода они не идут, и за того, что доход считается по всем позициям, т.е. суммируются все позиции за день, а расход по каждой позиции отдельно, вот и разница. Такую головоломку мне задала бухгалтер. Такая у меня ситуация. Я надеюсь, Вы войдете в мое положение.
Добрый вечер! При доработки файла от Ivan.kh,"ПРИМЕР(нумерация).xlsm (40.53 КБ)" по замечанию бухгалтера, у меня появились ошибки, это в отображении даты, порядкового номера и примечания, столбцы AG, AH и AJ, пожалуйста, подправьте формулу в столбце AG, AH и AJ, чтобы формула правильно работала.
В столбце AI формулу менять НЕ НУЖНО, там я доработал так, как требует мой бухгалтер. Заранее благодарю.
P.S.Только, пожалуйста не МАКРОСОМ, где нужно нажимать на кнопку, а с помощью UDF, можно.
vikttur, мне нужно обработать файл, который содержит 23 листа, кое что удалить нужно, а кое что переделать. Все формулы пересмотреть затруднительно. По поводу картинки, я не понял, что Вы имели ввиду, сообщите.
Казанский, По поиск "NavigateArrow" имеется макрос, но не тот который мне нужен, он указывает ссылку, если выделенная ячейка содержит формулу.
Добрый день. Открыт Лист1, на ячейку D3 есть ссылка с другого листа, и когда выделяешь ячейку и нажимаешь на значок «Зависимые ячейки», то появляется нижеследующий значок. Как определить, с какого листа и с какой ячейки идет ссылка? Заранее благодарю.
Kuzmich, Не совсем подобный, на вышеуказанном форуме обсуждали Расходный кассовый ордер, а здесь обсуждали Журнал регистрации приходных и расходных кассовых документов, эти совершенно разные документы, есть еще и Приходный кассовый ордер. Об этих документах можно посмотреть здесь, или точнее здесь ПКО, здесь РКО, а здесь,что обсуждали в этой ветке ЖРПРКО. Ваш вариант для РКО,подошел, и работает отлично, а для ЖРПРКО, как я понял применить его не возможно, так как исходные таблицы находятся на разных листах, может я и ошибаюсь. Поэтому и создал новую тему.
565,37 - это число пишется в ячейки A10, в ячейки B10 прописью отображается 565, а в ячейки C10 отображается 37 цифрами Пример в файле. Заранее благодарю.
P.S. Воспользоваться поиском, можете не предлагать, до 2.30 ночи искал на форумах, и что мне нужно, не нашел.
Добрый день. Выложил файл, в котором показано, как будет переключаться по месяцам. Февраль должен начаться (порядковый номер) № 8, март с №13, апрель №17, и так далее. Заранее благодарю.
Сама формула работает правильно. Вопрос в другом: Ваш пример за месяц январь, и последнее порядковое число =7, а если наступит февраль, и этот бланк переключится на февраль, то порядковый номер с какого числа начнется? А надо с числа =8. и т.д.
JayBhagavan, нет, не то что нужно, файле "формула ранга" попытка сделать формулу мне нужной.
vikttur, Ваш вариант =ЕСЛИ(там="";"";дата) , тоже не подходит, т.к. в столбце AG: появляются пустые ячейки между датами, что не соответствуют рядом находящемся столбцу. Ваш вариант предполагает вставку дополнительной строки, что я и сделал, см. в примере.
Юрий М, если этот, Вами предложенный вариант применить,=ЕСЛИ(ЕПУСТО(AI7);"";СЧЁТЗ($AI$7:AI7)), то ячейки, где должны быть пустыми, в столбце AH, заполнены полностью, как я полагаю, ведь ссылка идет на массив, что делает не работоспособную формулу. Ваш вариант можно попробовать, при вставки дополнительной строки. НО пустая ячейка содержит формул, формула не работает. ПРИМЕР 2 В первом, и во втором варианте, дополнительной строки буду вставлять, если не найду другого варианта. Надеюсь на Вашу помощь.
vikttur пишет: В тексте сообщения - В30 , в файле совсем не то. Специально? В прятки играем?
Смысл? Никакой цели не преследование, перед обращение сюда, искал по форумам нужное, в частности здесь, пост 148637, лист 1, и формулу стал дорабатывать под нужное, и когда не получилось, тогда и обратился сюда, скопировав формулу нижеследующего файла.
Под свой случай не мог найти, нашел такую формулу =РАНГ(B30;$L$9:$L$38;1) В моем случае, если бы дата добавлялась, то проблем не было бы, а она постоянна отображается (дата), здесь и возникли у меня сложности
Вроде получилось, еще раз протестирую, обязательно отпишусь, но наверное вечером. Предположительно, при тестировании моя ошибка была в следующем когда копировал на лист 3 с активного листа, то на последнем задавал одинаковую высоту всех строк. Что-то до меня не сразу дошло. На сегодня Вам огромное спасибо, извиняюсь, если кого ввел в заблуждение. Результат сообщу. Всего хорошего.
Да, был, но вариант не подходит. Файл выложил для образца, чтобы показать, как можно скопировать залпом высоту строк, и вставить в другой лист, именно высоту, а ширину подправлю через спец. вставку. А подтянуть данные с макросом, проблем пока не составляет.
Этот бланк нужно вставить в файл Excel, т.е. скопировать в существующий лист, где есть уже данные, но каждую строку в ручную редактировать, не хватит терпения. Спасибо.