Kategorie szkoleń | Egzaminy | Kontakt
  • 4
  • 11
  • 1.6K

Witam.

Potrzebuję napisać kod VBA, który będzie wysyłał około 30 raportów różniących się między sobą do określonych grup adresatów.

Przykładowo moje pliki z raportami nazywają się rap_01.xlsm, rap_02.xlsm, rap_03_xlsm i tak aż do rap_30.xlsm.

Mam stworzoną tabelę z nazwami plików i przyporządkowaną do niej listę adresową (dystrybucyjną) - każdy adres jest oddzielony średnikami.

Przykład tabeli poniżej:

 

 

 

Przemo
  • Zapytał
  • @ Przemo | 30.10.2014
    • laureat
    • 59
    • 24
    • 71

Odpowiedzi (4)

  • 10

Panie Przemku.

Jedno z możliwych rozwiązań:

  1. Zaznaczamy zakres komórek  Ctrl +A (kod pomija wiersz nagłówkowy).
  2. Uruchamiamy makro:
Sub Wyslij()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim zakres As Range
    Dim w As Integer

    Application.ScreenUpdating = False
    
    'tworzymy obiekt aplikacji Outlooka
    
    Set OutApp = CreateObject("Outlook.Application")

    On Error GoTo cleanup
    
    'zaznaczony zakres komórek
    Set zakres = Selection

    'od drugiego wiersza bez wiersza nagłówkowego
    For w = 2 To zakres.Rows.Count
    
    'tworzymy nowego maila
    Set OutMail = OutApp.CreateItem(0)

        On Error Resume Next
            ' skladnia maila
            With OutMail
                'do kogo  - pobieramy z drugiej kolumny zaznaczenia
                'z kolejnych wierszy zaznaczenia
                
                .To = zakres.Cells(w, 2).Value
                
                'to mozna zmienić na dowolną treść
                .Subject = "raport"
                
                'jak chcemy może być treść maila
                '.Body =
                
                ' dodajemy załcznik - ŚCIEŻKĘ PROSZĘ ZMIENIĆ NA SWOJĄ
                'nazwe pliku pobieramy z 1 kolumny zaznaczenia
                .Attachments.Add "C:\Documents and Settings\instrutor\Pulpit\dane\" & zakres.Cells(w, 1).Value
                
                .Send
            End With
        
    Set OutMail = Nothing
       
    Next w

cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True
    
MsgBox "koniec"
    
End Sub

Patrz załącznik.

Załączniki

  • xlsm

    dane.xlsm ( 20K )
  • Odpowiedział
  • @ | 04.11.2014
  • TRENER ALTKOM AKADEMII
Komentarze
Super. Działa. Dzięki bardzo.
Skomentował : @ Przemo ,04.11.2014
  • 59
  • 24
  • 71
Witam, powyższy kod działa, ale przed wysłaniem maila z załączonym raportem pojawia się okienko Outlooka z komunikatem zaczynającym się od: "Pewien program próbuje automatycznie wysłać wiadomość..." Przy wysyłce np 30 maili naciskanie "Zezwól" jest denerwujące. Czy jest jakaś funkcja, która mogłaby domyślnie wybierać " Zezwól"? Pozdrawiam, Michał
Skomentował : @ Mick71 ,30.12.2015
  • 1
  • 0
  • 0
  • 6
  • Odpowiedział
  • @ | 01.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
  • 0

Witam.

Chciałbym się dowiedzieć, czy można z poziomu VBA obejść komunikat "Pewien program próbuje automatycznie wysłać wiadomość...", bez instalowania dodatkowych programów?

Z góry dziękuję za pomoc.
Paweł.

Paweł_Walczak
  • Odpowiedział
  • @ Paweł_Walczak | 21.03.2016
    • 2
    • 0
    • 0
  • 0

Tak, należy posiadać uprawnienia administratora i zmodyfikować opcję w Centrum zabezpieczeń Outlooka (plik/Opcje/Centrum zabezpieczeń/Ustawienia/Dostęp programowy i wybrać: Nigdy nie ostrzegaj ....

 

  • Odpowiedział
  • @ | 11.05.2016
  • TRENER ALTKOM AKADEMII