Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek 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

Gianni_85 10 Lis 2015 21:38 1317 6
  • #1 10 Lis 2015 21:38
    Gianni_85
    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

    0 6
  • #2 11 Lis 2015 16:26
    adamas_nt
    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.

    0
  • #3 12 Lis 2015 07:40
    Gianni_85
    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.

    0
  • #4 12 Lis 2015 09:26
    adamas_nt
    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"

    0
  • #5 12 Lis 2015 09:54
    Gianni_85
    Poziom 6  

    Czyli to powinno byc jakoś tak?

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #6 12 Lis 2015 10:33
    adamas_nt
    Moderator Programowanie

    Tak, tylko ścieżka będzie różna dla różnych wersji...

    0
  • #7 12 Lis 2015 14:07
    Gianni_85
    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

    0