Marek Musiał

Marek Musiał Manager - Technology
Projects

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Witam,

Potrzebuję porady nt. kosmetycznej (dla Państwa zapewne) zmiany w działającym już makro:

Jestem na początku programowania i nie przeczę, że gdyby profesjonalista zobaczył mój kod, to by się pewnie uśmiechnął ironicznie. Niestety jestem humanistą, więc moje początki na tym polu są trudne. Celem kodu nad którym siedziałem 2 dni jest generowanie wiadomości e-mail w Outlook-u z poziomu arkusza w Excel-u.

Wspaniale prezentujące się przyciski w arkuszu generują szybciutko rzeczone wiadomości, kopiując potrzebne dane do treści mail-a oraz też takich pól jak To, Cc, Subject itp.

Niestety jako, że nie posiadam jeszcze większego doświadczenia w temacie, to wzory mail-i na których pracuje makro są kopiowane z jednego z arkuszy. Doszedłem do tego, żeby ustawić ich formatowanie jako HTML i znacznikami odpowiednio ustawić czcionkę, kolor i ustawienie tekstu.

Mój problem natomiast dotyczy faktu, że jakiekolwiek dane wprowadzane do takich szablonów, czy to z poziomu arkusza, czy user-form-ów mają domyślnie czcionkę Times New Roman.

Czy można tę domyślną czcionkę zmienić?

Pozdrawiam,
Marek
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Nie wiem, jak wyglądają te "wzory maili", ale przecież z poziomu VBA można sformatować wiadomość w HTML, a więc i ustawić odpowiednią czcionkę.

    With objMail
'Format wiadomości - HTML.
.BodyFormat = olFormatHTML
.HTMLBody = "<HTML><BODY>Cześć, jak się masz? </BODY></HTML>"
.Display
End With
Marek Musiał

Marek Musiał Manager - Technology
Projects

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Kwestia jest bardziej skomplikowana. Już spieszę precyzować.

Wiadomości nie będą zawierały samych szablonów. Wtedy rzeczywiście mógłbym je wpisać w kodzie VBA jak podane poniżej. Ale u mnie oprócz nich kopiowane są też dane z arkusza, które z każdą wiadomością będą się dynamicznie zmieniać. Wiadomość będzie zawierać szablon i różne dane z arkusza. Dla szablonów utworzyłem osobny arkusz (TrackSource) i tam każdy z nich jest przygotowany w kodzie HTML, więc zarówno czcionka jak i wszystkie inne atrybuty są ustawione ślicznie i bez zarzutu jest to odwzorowane w generowanej wiadomości. Natomiast, dane, które kopiują się do takiego szablonu dynamicznie, pochodzą z komórek z drugiego arkusza.

Kod przykładowej wiadomości wygląda np. tak:

.HTMLBody = ThisWorkbook.Sheets("TrackSource").Range("NatBody").Value & ActiveCell.Offset(0,1) & ThisWorkbook.Sheets("TrackSource").Range("NatBody1").Value

"NatBody" to jest pierwsza część szablonu przechowywana w arkuszu TrackSource. VBA wrzuca ją do wiadomości i następnie wkleja zawartość komórki z drugiego arkusza, do której odnosi się odniesienie ActiveCell.Offset(0,1). Po czym znowu wkleja dalszą część szablonu "NatBody1". Ta wartość z ActiveCell.Offset(0,1) jest wklejana do wiadomości w domyślnym formacie, Times New Roman, wielkość 12. Kłóci się to z szablonem, który jest w innym formacie.

Spróbowałem pominąć odwoływanie się do szablonów w osobnych arkuszach, wpisując tak jak w podanym rozwiązaniu poniżej, ale wtedy nie wiem jak rozwiązać kwestię przeplatania ich zmiennymi z arkusza. VBA tego nie akceptuje. Albo ja nie potrafię umiejętnie dysponować dostępnymi operatorami.

Help?
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Nie ma bata, żeby to nie zadziałało (tagami HTML określamy domyślną czcionkę dla BODY).
Problem stanowią tylko znaki cudzysłowu w kodzie, więc trzeba posłużyć się dodatkowo funkcją zwracającą dany znak do naszego łańcucha tekstowego.

Dim wsTrackSource As Worksheet

Set wsTrackSource = ThisWorkbook.Sheets("TrackSource")

With Email
.To = "biuro@firma.pl"
.BodyFormat = olFormatHTML
.HTMLBody = "<HTML><body style=" & Chr(34) & "font-family: Verdana" & Chr(34) & ">" & _
wsTrackSource.Range("NatBody").Value & _
ActiveCell.Offset(0, 1) & _
wsTrackSource.Range("NatBody1").Value & _
"</BODY></HTML>"
.Display
End With
Marek Musiał

Marek Musiał Manager - Technology
Projects

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Dziękuję za rozwiązanie zagadki.

Marek
Monika M.

Monika M. PROGRAMISTA VBA,
Excel, Access,
Outlook, Word -
SZKOLENIA

Temat: VBA (Excel i Outlook) - zmiana czcionki domyślnej przy...

Proszę bardzo, na zdrowie! :)

A dla trzymania się zasad, o które sama walczę, to na końcu makra trzeba dodać niszczenie zmiennej obiektowej wskazującej na arkusz z danymi:

Set wsTrackSource = Nothing



Wyślij zaproszenie do