Страницы: 1
RSS
Копирование диапазона в строку адреса outlook
 
Доброго дня, позвольте спросить. Написал небольшую функцию в VBA. Я только начал вариться в кодинге. Функция работает и копирует нужные диапазон, но почему то возвращает в строку адреса значений "-1" (при некоторых изменениях true ). Я так понял так как возвращается значение типа Range, а нужно string. Значение берутся из нескольких ячеек (адреса почты). Как мне вернуть в строку адреса аутлук значение из 2-5 ячеек?

хотелось бы в строку ".To = " вбивать значение из нескольких ячеек(конкретон то, которое я выделил функцией) или скопировал, преобразовал в массив, это не важно, просто я не понимаю как лучше. У меня есть вариант возвращаться функцией значение Range, а затем преобразовывать в строку или массив, как это сделать я правда не знаю. ужно передать в функцию строку, а получить обратно диапазон, который можно вставить в строку адреса в outlook.

Я пробовал так же переносить в хтмл, открывать как txt и переносить в строку, но там кеся меся из хтмл разметки, видимо надо формат определить как и для тела сообщения.
Так же пробовал создавать временный текстовый документ, переносить в него все. затем из него все копировать в нужную мне строку, но заблудился в синтаксисе и встал

итог: я функцией методом select или copy(как угодно) обозначил диапазон. Как мне его из функции вызвать в процедуре и засунуть в адрес получателя. Значение обычно от 3-6. Помогите пожалуйста.

Код
 
Private Sub Send_Mail()
    Dim objOutlookApp As Object, objMail As Object
    Application.ScreenUpdating = False
    On Error Resume Next
    Set objOutlookApp = CreateObject("Outlook.Application")
    objOutlookApp.Session.Logon
    Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
    On Error GoTo 0
    'создаем сообщение
    With objMail
        .To = otvetvstvenie("value")
        .CC = _
        "inbox@mail.ru; seraga@mail.ru"
        .Subject = _
        "тема сообщения"
       .BodyFormat = 2  'olFormatHTML - формат HTML
        .HTMLBody = _
        "Добрый день, направляю дедлайны." & "ConvertRngToHTM(Selection)"
        .display 'отображаем сообщение
    End With
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub
 
Function otvetvstvenie(bank As String) 
 
Dim lLastRow As Long, bank As String
lLastRow = Cells(Rows.Count, 4).End(xlUp).Row

Application.Workbooks("Ответственные.xlsx").Sheets("Лист1").Activate
Range("C4").AutoFilter Field:=2, Criteria1:=bank
Range("F5" & ":F" & lLastRow).Copy
End Function
 
up
 
Argo9, ну скопировали, а функция возвращать что должна? Ей об этом ни чего не сказано.
По вопросам из тем форума, личку не читаю.
 
Я в аналогичной ситуации перебираю ячейки с адресами циклом и формирую строку, которую затем подставляю в поле "Кому"..
 
Юрий М, Юра, ту скорее всего сработало клише такой операции в интерфейсе, когда копируешь и вставляешь в поле TO через буфер обмена. Но тут то нет буфера.
Argo9, Использовать автофильтр можно, но придется шаманить куда больше чем просто использовать .FIND Или перебор значений в массиве, формируя строку с адресами разделенную разделителем.
По вопросам из тем форума, личку не читаю.
 
Юрий М, можно вас попросить показать как вы это делаете? Может я откажусь от фильтрации, мне сразу казалось что метод корявый.

БМВ, тут в этмо и вопрос, как вернуть?) я писал в конце функции Return *переменная*, но мне выдате ошибку "Expected: end of statement".
А можно для цикла показать условия вбивания в строку? Я так понимаю, если cells(1, 1) = bank then слепить в какую-то ячейку.

Благодарю!
 
Код
    With OutMail 'Это переменная
        LastRow = Sheets("Лист2").Cells(Rows.Count, 4).End(xlUp).Row
        For i = 2 To LastRow
            If StrokaAdr = "" Then
                StrokaAdr = Sheets("Лист2").Cells(i, 4).Text
            Else
                StrokaAdr = StrokaAdr & ";" & Sheets("Лист2").Cells(i, 4).Text
            End If
        Next
        .to = StrokaAdr 'Адресаты
        .Subject = Sheets("Лист2").Range("F2").Value  'Тема
        .Body = ""
        .Attachments.Add Sheets("Лист2").Range("H2").Value  'Путь к файлу
'        .Send
        .Display
    End With
 
Юрий М, извиняюсь за глупый вопрос StrokaAdr = Сells(1,1)? типа object или как?
Изменено: Argo9 - 25.09.2019 17:38:43
 
StrokaAdr - это у меня переменная типа String.
 
Цитата
Юрий М написал:
StrokaAdr - это у меня переменная типа String.
по тому что надо писать StrTO или на худой конец StrAddr.  ;)
По вопросам из тем форума, личку не читаю.
 
Всем спасибо! Проблему решил, все работает как я хотел.
Страницы: 1
Наверх