Товарищи/друзья/коллеги, доброго дня всем) После замены компанией Outlook'a на почтовый клиент Mail app от Windows появилась проблема автоматической рассылки писем с помощью vba. Не могу даже правильно нагуглить, как в vba создать ссылку на объект Mail... Весь гугл отсылает или на маил.ру, или на общее описание этого замечательного клиента... Может уже кто сталкивался с Mail'ом, помогите, а?. )
дополню. Код писал я в одной из предыдущих тем. Массив не пустой. В mass(a, 7) записывается формула со СЧЕТЕСЛИ. При выгрузке ошибка. Причем у меня ошибки нет, формула переносится со значением #VALUE!, у автора ТС не переносится вообще. Формула в mass(a, 5) обрабатывается нормально, там просто ссылка на ячейку в другой книге, без вычислений. Пробовали запускать макрос с открытой книгой, на которую ссылка в СЧЕТЕСЛИ, закрытой, перемещать книгу в другую папку (по аналогии - у меня книги нет, и работает), в общем, танцы с бубном какие-то...
данные не равны просто. Хотя и проверка показывает TRUE сравнил 2 значения 0,28 первое - 0.27999999999999997 второе - 0.28000000000000003 а правильный ответ таки да, #ДЕЛ/0!, какая там корреляция..
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 9 Then Exit Sub
Dim cl As Range
For Each cl In Range("A" & Target.Row & ":H" & Target.Row)
If cl.Value = "" Then
Application.EnableEvents = False
Target = ""
MsgBox ("Заполнены не все поля")
Application.EnableEvents = True
Exit Sub
End If
Next
With Worksheets(Target.Value)
k = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Range("A" & k & ":I" & k).Value = Range("A" & Target.Row & ":I" & Target.Row).Value
End With
End Sub
Sub nz()
Dim cl As Range
For Each cl In Range("G2:G" & Cells(Rows.Count, "G").End(xlUp).Row)
If Mid(cl, 12, 1) <> "&" Then cl.Offset(0, -4) = Replace(Mid(cl, 12, 6), ".", "")
Next
End Sub
Sub nz()
Dim cl As Range
For Each cl In Range("G2:G" & Cells(Rows.Count, "G").End(xlUp).Row)
If Mid(cl, 12, 1) <> "&" Then cl.Offset(0, -4) = Mid(cl, 12, 6)
Next
End Sub
а без точек - 12 позиция без учета точек? или результат без точек? если в результате есть точка, и ее убираем - остается 5 символов? или добавляем следующий?
Календарь этот как отчет о проделанной работе получается...интереснее, если б он как планировщик работал, отслеживал там предстоящие пятницы, выходные и празники и планировал градус к употреблению, с учетом, конечно, фактических данных за предыдущий день-два, а то и рекомендовал бы "прогулы"..)
yelena321, с Вашим изменением имени листа с "1" на "Август" должно и так работать. Если в 10-й строке заменить Value на Text будет работать и с именем листа "1"
От тут как-то и я в свое время не разобрался, да так руки и не дошли, если имя листа "1" как объяснить экселю в vba что это имя, а не индекс..) Мысль пришла, может не Value, а cells(i, 4).Text использовать?
Sub sbor()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet, wb As Workbook
Set sh = ActiveSheet
i = 3
Do While sh.Cells(i, 1).Value <> ""
pth = sh.Cells(i, 1).Value & "\" & sh.Cells(i, 3).Value
Set wb = Workbooks.Open(pth, , , , sh.Cells(i, 2).Value)
wb.Worksheets(sh.cells(i,4).value).Copy after:=sh
wb.Close 0
i = i + 1
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
вариант. Скопирует все листы со всех указанных книг в книгу со списком.
Код
Sub sbor()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet, wsh As Worksheet, wb As Workbook
Set sh = ActiveSheet
i = 3
Do While sh.Cells(i, 1).Value <> ""
pth = sh.Cells(i, 1).Value & "\" & sh.Cells(i, 3).Value
Set wb = Workbooks.Open(pth, , , , sh.Cells(i, 2).Value)
For Each wsh In wb.Worksheets
wsh.Copy after:=sh
Next
wb.Close 0
i = i + 1
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
в примере - имя файла - C:\Users\Documents\2 это больше похоже на имя папки, к тому же там же Имя книги =1. Имя файла нужно с расширением
Цитата
yelena321 написал: собрать макросом листы из этих файлов
и получить книгу с большим количеством листов? Если Вы знаете, что дальше делать с этими листами, хорошо, но скорее всего потом будут вопросы что-то типа как собрать все на один лист, или как посчитать во всем листам что-то по условию
попробуйте отключить автообновление экрана, возможно и автопересчет формул, чтоб ускорить код. Для того, чтоб выводить даты, можно дописать условие во второй цикл. Не знаю, может ли у Вас быть заказ с пометкой сразу "не требует согласования" и отсутствовать запись по этому же заказу с пометкой "на согласовании", поэтому проверку оставил в двух циклах
Код
Sub d()
Application.ScreenUpdating = False
Dim dic
Set dic = CreateObject("Scripting.Dictionary")
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 3).Value = "На согласовании" Or Cells(i, 3).Value = "Не требует согласования" Then
ky = Cells(i, 1).Value
it = Cells(i, 2).Value & "|" & Cells(i, 3).Value
If dic.exists(ky) Then dic.Item(ky) = it Else dic.Add ky, it
End If
Next
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 3).Value = "Согласован" Or Cells(i, 3).Value = "Не требует согласования" Then
ky = Cells(i, 1).Value
s = Split(dic.Item(ky), "|")
dic.Item(ky) = s(LBound(s)) & "|" & Cells(i, 2).Value
End If
Next
i = 2
For Each ky In dic.keys
s = Split(dic.Item(ky), "|")
Range("E" & i) = ky
Range("F" & i) = s(LBound(s))
Range("G" & i) = s(UBound(s))
i = i + 1
Next
Application.ScreenUpdating = True
End Sub