Друзья!Д обрый день! Прошу вашей помощи - может быть у кого-то есть заготовка.
Есть сводная таблица, в ней 3 столбца - Название Склада, Продукт, Сумма по полю продукт. Требуется скопировать на отдельный лист или рядом (как в примере), при этом сделать это при помощи макроса: Название Склада, Продукт (Сумма по полю продукт) раз друг под другом, проделать данную операцию для каждого Название Склада.
Использую макрос для рассылки данных о качестве продажи сладостей сотрудниками шоколадной фабрики.
Код
Sub Send_Email()
Dim OutApp As Object
Dim OutMail As Object
Dim c, u As String
Dim name, count As Integer
Dim PlaceY As Range
Dim rDataR As Range
Dim sBody As String
u = Worksheets("settings").Range("b3")
With Application
.Calculation = xlManual
.ScreenUpdating = False
.EnableEvents = False
End With
c = Worksheets("Settings").Range("b3").Value
sBody = Worksheets("Settings").Range("B4").Value
For i = 1 To c
Set OutApp = CreateObject("outlook.application")
Set OutMail = OutApp.CreateItem(0)
name = ActiveWorkbook.Sheets("Settings").Range("c" & (i + 1)).Value
Worksheets("SMART").PivotTables("ÑâîäíàÿÒàáëèöà1").PivotFields("Ëîãèí îïåðàòîðà"). _
ClearAllFilters
Worksheets("SMART").PivotTables("ÑâîäíàÿÒàáëèöà1").PivotFields("Ëîãèí îïåðàòîðà"). _
CurrentPage = name
ThisWorkbook.Worksheets("smart").Select
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
sBody = Replace(sBody, Chr(10), "<br />")
sBody = Replace(sBody, vbNewLine, "<br />")
sBody = "<span style=""font-size: 14px; font-family: Arial"">" & sBody & "</span>"
Set rDataR = Selection
sTblBody = ConvertRngToHTM(rDataR)
sBody = Replace(sBody, "{TABLE}", sTblBody)
With OutMail
.SentOnBehalfOfName = ActiveWorkbook.Sheets("Settings").Range("b1").Value
.Subject = ActiveWorkbook.Sheets("Settings").Range("b2").Value
.To = name & "@poctalion.mail"
.HTMLBody = sBody
.Display
' .Send
End With
Set OutApp = Nothing
Set OutMail = Nothing
'Application.Wait Time:=Now + TimeSerial(0, 0, 2)
Next i
With Application 'Turning graphical options back
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
Worksheets("settings").Activate
End Sub
Код
Function будет в следующем сообщении - сейчас слишком много символов.
При работе данного кода первое письмо выглядит совершенно верно:
"1, png"
Однако все последующие принимают неудобоваримый вид:
"2, png"
Подскажите пожалуйста, что предпринять для корректной генерации писем?
Для рассылки по некоторым сотрудникам информации хочу сделать макрос. Взял уже имеющиеся на просторах, в целом он устраивает.
Но не могу понять, почему-то на некоторых сотрудниках он накладывает график на скриншот, на некоторых нет.
Код
Sub Send_Email()
--------------------------------------------------------
With OutMail
.SentOnBehalfOfName = ActiveWorkbook.Sheets("Settings").Range("b1").Value
.Subject = ActiveWorkbook.Sheets("Settings").Range("b2").Value 'So called (by myself) head of letter.
.To = name & "qweqweqweqweqweqwe.RU"
.HTMLBody = "<span LANG=EN>" & "Text"
Call Get_Txt("321123545684") 'Time to create the image as a JPG file
.Attachments.Add TempFilePath & "321123545684.jpg", 0, 0
.HTMLBody = .HTMLBody & "Text"
'Let us combine object 2 with a body of message
.HTMLBody = .HTMLBody & "<BR>" & "<img src='cid:321123545684.jpg'" & "Text"
.Display
End With
Set OutApp = Nothing
Set OutMail = Nothing
Next i
With Application 'Turning graphical options back
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Sub Get_Txt(NameFile As String)
Dim PlaceY As Range
ThisWorkbook.Worksheets("smart").Activate
Set PlaceY = ThisWorkbook.Worksheets("Smart").Range("A4:c20")
PlaceY.CopyPicture
With ThisWorkbook.Worksheets("SMART").ChartObjects.Add(PlaceY.Left, PlaceY.Top, PlaceY.Width, PlaceY.Height)
.Activate
.Chart.Paste
.Chart.Export Environ$("temp") & "\" & NameFile & ".jpg", "JPG"
End With
Worksheets("SMART").ChartObjects(Worksheets("SMART").ChartObjects.count).Delete
Set PlaceY = Nothing
End Sub
Подскажите пожалуйста, как с помощью макроса можно проверить есть ли во вкладках «1» и «2» данные в областях “С3:G1000”? Если есть то на листе «Лист1» вставить в ячейку «B2» «+»
Следующим сообщением прикладываю файл. Подскажите пожалуйста, как с VBA в столбце B:B (количество имён бесконечно (образно) с помощью фильтра выбрать всех, кроме "Вакансия", благодарю Вас.
Периодически при работе с документа через макрос происходит появление таблички с запросом на обновление связей. Подскажите пожалуйста, как можно отключить данный запрос? Он полностью останавливает работу программы.
В куске кода ниже происходит проверка на наличие файлов из списка в файле Excel. Если есть файл (открывается), то в ячейке правее ставим "+", в противном случае (любая ошибка) ставим "-".
При работе данного цикла при повторной встрече файла, который не открывается появляется критическая ошибка и макрос тормозит. Как это можно предотвратить? Подскажите пожалуйста, где может быть ошибка?
Или можно ли сделать это проще?
Код
Do
Range("a2").Activate
bookname = ActiveCell.Offset(r, c).Range("A1")
On Error GoTo Label
Workbooks.Open Filename:= _
bookadr & "/" & bookname
Workbooks(bookname).Close
c = c + 1
ActiveCell.Offset(r, c).Range("A1").Select
ActiveCell = "+"
c = c - 1
GoTo Labey
Label:
c = c + 1
ActiveCell.Offset(r, c).Range("A1").Select
ActiveCell = "-"
c = c - 1
Labey:
r = r + 1
i = i + 1
Loop Until i = 15
Столкнулся с задачей: необходимо в созданную группу рассылок (в адресной книге редактируемый список, доступный всем) добавить пользователей. К сожалению в ручном режиме можно добавлять только по 1-му человеку, а их более 2000 человек, что полностью исключает ручное внесение.
Как решение вижу только написание макроса, который бы по одному добавлял из списка в Excel (генерацию которого тоже хочу автоматизировать), в группу Outlook.
Прошу подсказать как можно реализовать данную задумку при условии, что никогда с Outlook не взаимодействовал с точки зрения VBA.