Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

excel/vba - dodawanie różnych wersji bibliotek outlook oraz szyfrowanie pliku

10 Lis 2015 21:38 1869 6
  • Poziom 6  
    Czesc wszystkim,

    Czy ktos bedzie w stanie pomoc mi z optymalizacja kodu vba? Sprawić by byl on czytelniejszy.

    Oprócz tego potrzebna jest mi pomoc w dodaniu do kodu vba 2 rzeczy:
    - w zależności od wersji offica musza się dodac odpowiednie wersje biblioteki outlooka
    - plik musi sie zapisywać i szyfrować z hasłem

    Plik będzie udostępniany w formie szablonu, który następnie uzupełniany przez Użytkowników i dopiero po wciśnięciu guzika wyślij formularz powinny sie dziać następujące rzeczy:
    - weryfikacja czy wszystkie pola sa uzupełnione,
    - jak tak to sprawdzenie czy Użytkownik zaznaczył zgodę
    - zapis pliku,
    - szyfrowanie pliku (z tym samym hasłem da wszystkich dokumentów jakie będą utworzone na podstawie tego szablonu)
    - uruchomienie makra wysyłającego plik

    poniżej kod vba z pliku

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Gianni_85 napisał:
    - w zależności od wersji offica musza się dodac odpowiednie wersje biblioteki outlooka
    Najprościej wykorzystując 'Application.Version'.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Gorzej, jeśli User ma zainstalowane rożne wersje. Wtedy musiałbyś sprawdzać właściwość obiektu Outlook.
  • Poziom 6  
    Hej,

    nie potrzebowałem wyswietlić Użytkownikowi numeru wersji office lecz dodac odpowiednią wersje biblioteki outlooka w zależności od wersji zainstalowanego offica.

    W tym momencie kod mi działa ponieważ sam dodałem odpowiednią bibiliotekę do kodu ale na innej wersji office plik nie będzie działać i pokaże się komunikat o brakujących bibliotekach.

    Aby plik zadziałał wszystkim potrzebuje dodać do pliku przynajmniej 3 wersje bibliotek:
    - Microsoft Outlook 15.0 Object Library
    - Microsoft Outlook 14.0 Object Library
    - Microsoft Outlook 12.0 Object Library

    Dodano po 1 [godziny] 39 [minuty]:

    Aby zaszyfrowac plik trzeba było zrobić coś takiego

    ActiveWorkbook.SaveAs Filename:="FilePath", Password:="password"

    odpowiedź znalazłem pod tym linkiem: http://www.mrexcel.com/forum/excel-questions/...ations-code-add-password-open-excel-file.html

    W dalszym ciągu jednak potrzebuję pomocy z automatycznym dodawaniem odpowiednich bibliotek outlooka do pliku.
  • Moderator Programowanie
    Gianni_85 napisał:
    nie potrzebowałem wyswietlić Użytkownikowi numeru wersji office
    Och, zamiast MsgBox'ów wstaw wiązania.

    Tu przykład dla Outlook 14.0
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
    Z innymi będzie podobnie. Szukaj pod hasłem "add outlook library reference with vba code"
  • Poziom 6  
    Czyli to powinno byc jakoś tak?

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Moderator Programowanie
    Tak, tylko ścieżka będzie różna dla różnych wersji...
  • Poziom 6  
    w sieci udało mi się poznajdywac różne lokalizacje potrzebnych bibliotek jednak wywala mi bład już na 1 linijce po nazwie makra

    private Sub wyslij_dane_z_formularza()

    Select Case Application.Version

    Case "12.0"
    Const outlookRef As String = "C:\Program Files\Microsoft Office\Office12\outlook.exe"

    If Not RefExists(outlookRef, "Microsoft Outlook 12.0 Object Library") Then
    Application.VBE.ActiveVBProject.References.AddFromFile outlookRef

    Case "14.0"
    Const outlookRef As String = "C:\Program Files (x86)\Microsoft Office\Office14\1033"

    If Not RefExists(outlookRef, "Microsoft Outlook 14.0 Object Library") Then
    Application.VBE.ActiveVBProject.References.AddFromFile outlookRef

    Case "15.0"
    Const outlookRef As String = "C:\Program Files (x86)\Microsoft Office\Office14\MSOUTL.OLB"

    If Not RefExists(outlookRef, "Microsoft Outlook 15.0 Object Library") Then
    Application.VBE.ActiveVBProject.References.AddFromFile outlookRef
    End If


    End Select


    'Krok 1: Deklaracja zmiennych
    Dim OLApp As Outlook.Application
    Dim OLMail As Object
    Dim xSheet As Worksheet

    'Krok 2 Kopiowanie arkusza, wklejenie do nowego skoroszytu i zapisanie
    Set xSheet = Workbooks(ActiveWorkbook.Name).Sheets(ActiveSheet.Name)
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("b3") & "_" & Range("b4") & "_" & Range("b2") & ".xlsm", , 1111