Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[VBA] Wysyłanie maili od wybranego użytkownika



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Norek



Dołączył: 29 Wrz 2017
Posty: 1

PostWysłany: Pią Wrz 29, 2017 7:03 am  OP    Temat postu: [VBA] Wysyłanie maili od wybranego użytkownika Odpowiedz z cytatem Pisownia

Dzień dobry,

Mam proste makro wysyłające maile przypominające do użytkowników. Problem w tym, że ze skoroszytu korzysta wiele osób i jak przychodzi co do czego to maile wysyłają się od wszystkich, którzy mają otwarty ten skoroszyt. Czy można jakoś korzystając z loginu użytkownika wskazać osobę od której ma być mail wysyłany, lub chociaż niech wysyła się od losowej osoby ale tylko raz?
Makro wygląda tak i uruchamia się o określonych godzinach.

Kod:
Sub PNZ2()

Dim i
Dim a
Dim o As Object
Dim m As Object


'PNZ2
Worksheets("PnŻ").Activate

For i = Cells(1, Columns.Count).End(xlToLeft).Column To 2 Step -1
    If Cells(1, i) = Date Then
        For a = Cells(19, i).Row To 5 Step -1
            If Cells(a, i).Interior.ColorIndex = 6 And Cells(a, i).Value = "" Then
             Set o = CreateObject("OUTLOOK.Application")
             Set m = o.CreateItem(0)
                With m              
                .To = adresaci
                .Subject = "*monitoring*" & " " & Cells(1, 1).Value
                .HTMLBody = Cells(a, "A").Value
                .Display
                .Send
                End With
            End If
        Next
    End If
Next


End Sub

Dodałem znaczniki kodu. Zobacz: znaczniki formatujące - jak stosować.- Samolot
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
losmac



Dołączył: 25 Maj 2005
Posty: 1565
Skąd: Białystok

PostWysłany: Pon Mar 05, 2018 2:44 pm      Temat postu: Odpowiedz z cytatem Pisownia

Problemów jest kilka.

Pierwszy to taki, że za instancję Outlooka wywołujesz w pętli, a powinieneś tylko raz - na początku. Więc zamiast:
Kod:
For i = Cells(1, Columns.Count).End(xlToLeft).Column To 2 Step -1
    If Cells(1, i) = Date Then
        For a = Cells(19, i).Row To 5 Step -1
            If Cells(a, i).Interior.ColorIndex = 6 And Cells(a, i).Value = "" Then
             Set o = CreateObject("OUTLOOK.Application")
             Set m = o.CreateItem(0)
            'reszta kodu pominięta....


Lepiej tak:
Kod:
Set o = CreateObject("OUTLOOK.Application")
For i = Cells(1, Columns.Count).End(xlToLeft).Column To 2 Step -1
    If Cells(1, i) = Date Then
        For a = Cells(19, i).Row To 5 Step -1
            If Cells(a, i).Interior.ColorIndex = 6 And Cells(a, i).Value = "" Then
             Set m = o.CreateItem(0)
            'reszta kodu pominięta....



Wystrzegaj się używania metod: Activate i/lub Select. To jest powodem wielu późniejszych problemów. Każdy kod powinien być pisany w kontekście, więc, jeżeli Twój kontekst to arkusz,, to zamień go w ten sposób:
Kod:
Dim wsh As Worksheet

'później
Set wsh = ThisWorkbook.Worksheets("PnŻ")
Set o = CreateObject("OUTLOOK.Application")
For i = wsh.Cells(1, Columns.Count).End(xlToLeft).Column To 2 Step -1
    If wsh.Cells(1, i) = Date Then
    'reszta kodu pominięta


Widzisz różnicę?

Jeśli chcesz zapobiec przypadkowemu wysyłaniu maili przez użytkownika innego niż określony, możesz to osiągnąć w jeden z następujących sposobów:
1. Dodać do określonego skoroszytu ukrytą właściwość.
Jeśli nie istnieje lub ma inną niż określoną wartość, wyskoczyć z wykonywania procedury.
2. Weryfikować nazwę użytkownika z systemu
Jeśli jest inny niż określony - wyskoczyć z wykonywania procedury.
Ta metoda nie powiedzie się, jeśli nazwy użytkowników będą identyczne (mało prawdopodobne, ale jeszcze się zdarza).

Dla wersji 1, przeczytaj to: Porady: tworzenie i modyfikowanie właściwości niestandardowego dokumentu.

Dla wersji 2, użyj funkcji Environ:
Kod:
Sub PNZ2()
   'najpierw sprawdź użytkownika
    If UzytkownikWindows <> "TwojaNazwaUżytkownika" Then Exit Sub
    'reszta kodu
End Sub

Function UzytkownikWindows() As String
    UzytkownikWindows = Environ("username")
End Function

_________________
książka o VBA dla Office'a
UWAGA! Nie odpowiadam na PW, jeżeli wcześniej nie zostało to ze mną ustalone w ramach konkretnego wątku!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Oprogramowanie biurowe Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.13916 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |