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 - Wstawianie zdjęć do pliku, obsługa błędu jeśli tych zdjęć nie ma.

Przybysz89 14 Paź 2015 12:07 1254 20
  • #1 14 Paź 2015 12:07
    Przybysz89
    Poziom 6  

    Witam,
    napisałem kod, który wstawia mi zdjęcia, pozycjonuje i formatuje tak jak bym chciał, problem jest jedynie taki że w przypadku jeśli tych zdjęć jest mniej niż 6 (maksymalna założona liczba) to wyskakuje błąd (brak zdjęcia i koniec makra). Nie mogę poradzić sobie z obsługą błędu w tym przypadku. że jeśli któregoś zdjęcia/zdjęć nie ma to operacje ma wykonać tylko na tych co są.

    Jak to zrobić??

    kod poniżej:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 20
  • #2 14 Paź 2015 12:31
    Loker
    Poziom 38  

    On Error GoTo 0
    On Error Resume Next

    chyba losowo to wstawiałeś ;) Poczytaj w help'ie od VBA jak używać "On Error"

    0
  • #3 14 Paź 2015 12:50
    kinggustav
    Poziom 19  

    Pewnie się wywala, bo nie znajduje pliku ze zdjęciem. Można to załatwić i poprzez On Error, ale ładniej sprawdzić czy plik istnieje. Jeżeli zrobisz On Error to musisz skoczyć na koniec wstawiania zdjęć chyba. Nie wiem czy jest możliwe, że np. tylko zdjęcia numer 2 nie będzie, czy zawsze brakuje ostatnich?
    Proponowałbym też zrobić procedurę z tego kawałka wstawiającego zdjęcie i np. wywołać ją w pętli tyle razy ile jest plików ze zdjęciami, albo poprostu 6. Będzie łatwiej analizować.

    0
  • #4 14 Paź 2015 13:07
    JRV
    Specjalista - VBA, Excel

    Zgadzam się z @kinggustav, tym bardziej, że zdjęcia mają nazwy liczbowe.
    Użyj właściwości Left i Top, aby umieścić zdjęcia na właściwym miejscu. Odpadnie 'Select' wszyskich i ich pozycjonowanie.(Jak brak jednego - blad)
    Przypisz zmiennej sciezku do plikow( ("\\sts0004\QS-test\REKLAMACJE\Zarządzanie Reklamacjami\Reklamacje do dostawców 2015\" & DOSTAWCA & "\LR15" & NUMEREK & "\ "

    0
  • #5 11 Sty 2016 12:24
    Przybysz89
    Poziom 6  

    szczerze nie do końca umiem sobie z tym poradzić.. często też wywala mi błąd "Pobranie właściwości Insert klasy Puctures nie jest możliwe"...

    0
  • #6 11 Sty 2016 12:36
    JRV
    Specjalista - VBA, Excel

    Przed wstawieniem zdjęcie zrobić sprawdzanie

    Code:

    If Dir(<tu sciezka do zdjęcia>) <> "" Then
       ActiveSheet.Pictures.Insert(<tu sciezka do zdjęcia>)
    End If

    0
  • #7 11 Sty 2016 12:40
    Przybysz89
    Poziom 6  

    JRV, a jak to "zapętlić? próbowałem ale jeszcze słabo mi to wychodzi

    0
  • #8 11 Sty 2016 12:57
    JRV
    Specjalista - VBA, Excel

    W Twojem kodzie jest widoczne tylko rozmiar zdjęcia, ale nie ich lokalizacji w arkuszu. Tylko ruch względny. Z tego powodu trudno tej pętli do pisania. Rysunki są umieszczone w wierszach lub w kolumniach? Jeśli brakuje niektórych, pozostaje puste miejsce lub to miejsce następnego?

    0
  • #9 11 Sty 2016 13:14
    Przybysz89
    Poziom 6  

    zdjęcia są umieszczane luzem może to nie jest najlepsze rozwiązanie..,

    równie dobrze kolejne zdjęcia mogły by być w komórkach A66,A81,A96 i F66,F81,F96

    0
  • #10 11 Sty 2016 13:49
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #11 12 Sty 2016 09:29
    Przybysz89
    Poziom 6  

    ok jeśli zdjęcia oraz plik do którego mają być wstawione zdjęcia są w tym samym folderze to działa,

    Ale jeśli np makro jest uruchamiany przez plik REKLAMACJE 2016 który jest na jednej lokalizacji,
    a zdjęcia mają być wrzucone do pliku o nazwie FORMULARZ PL który też jest gdzie indziej wstawiony, a folder zdjęć ma być "Zmienny" w zależności o którą reklamację, klienta chodzi - to już nie działa;/ nic nie wstawia :(


    Prawdopodobnie problemem są zmienne DOSTAWCA i NUMEREK

    0
  • #12 12 Sty 2016 09:50
    JRV
    Specjalista - VBA, Excel

    Do zdjęci jest określona pełna sciezka:

    Code:
    DOSTAWCA = Workbooks("Reklamacje 2015.xlsm").Sheets("TEMP").Range("E1").Value
    
    NUMEREK = UserForm1.TextBox1.Text
    sciezka = "\\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Reklamacje do dostawcow 2015\" & DOSTAWCA & "\LR15" & NUMEREK & "\  ("

    To ja nie wymyślił, sobie przypomnieć(post #1)
    Przybysz89 napisał:
    zdjęcia mają być wrzucone do pliku o nazwie FORMULARZ PL który też jest gdzie indziej wstawiony

    Dlaczego jego nie otworzysz?
    Nie widzę, gdzie to jest, "gdzie indziej"

    0
  • #13 12 Sty 2016 11:29
    Przybysz89
    Poziom 6  

    Inaczej.

    Jeśli zamiast Zmiennych DOSTAWCA i NUMEREK wpiszę w ścieżkę wartości to zdjęcia wstawia bez problemu, jeśli natomiast ścieżka jest
    sciezka = "\\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Reklamacje do dostawcow 2015\" & DOSTAWCA & "\LR15" & NUMEREK & "\ ("


    Wtedy nie wstawia nic. Makro przeleci, a zdjęć nie ma.

    Plik z tym makrem jest na lokalizacji
    \\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\

    Plik do którego zdjęcia ma zrzucić przed zapisaniem go na właściwej lokalizacji
    \\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Formularze

    A zdjęcia są już w odpowiednich folderach, tj np:

    \\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Reklamacje od dostawców\ABC

    gdzie ABC (czyli DOSTAWCA) jest zmienne.. tak jak NUMEREK

    :/

    0
  • #14 12 Sty 2016 11:47
    JRV
    Specjalista - VBA, Excel

    Przybysz89 napisał:
    A zdjęcia są już w odpowiednich folderach, tj np:
    \\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Reklamacje od dostawców


    Przybysz89 napisał:
    jeśli natomiast ścieżka jest
    sciezka = "\\sts0004\QS-test\REKLAMACJE\Zarzadzanie Reklamacjami\Reklamacje do dostawcow 2015

    tak to ' 2015' trzeba lub nie ?

    0
  • #15 12 Sty 2016 11:53
    Przybysz89
    Poziom 6  

    tak ale 2016

    Dodano po 1 [minuty]:

    Załóżmy też że wspomniany formularz do którego ma załadować zdjęcia nazywa się "Formularz reklamacja do dostawcy.xlsx"

    0
  • #16 12 Sty 2016 12:05
    JRV
    Specjalista - VBA, Excel

    Makro jest uruchamiany z UserForm1 ?

    0
  • #17 12 Sty 2016 12:07
    Przybysz89
    Poziom 6  

    tak, zgadza się :)

    0
  • #18 12 Sty 2016 12:13
    JRV
    Specjalista - VBA, Excel

    Śledź makro krok po kroku(F8) i upewnić się, że wartości zmiennych DOSTAWCA i NUMEREK odpowiadają do prawidłowego

    Dodano po 2 [minuty]:

    Na początku makra, Dodaj otwarcie formularza, gdzie powinny być wstawiony Zdjęcia

    0
  • #19 12 Sty 2016 12:22
    Przybysz89
    Poziom 6  

    śledziłem, obie dane są prawidłowe odpowiadają nazwom folderów jednak nic nie wstawia...

    0
  • #20 12 Sty 2016 12:42
    JRV
    Specjalista - VBA, Excel

    Przybysz89 napisał:
    ActiveSheet.Pictures.Insert("\\sts0004\QS-test\REKLAMACJE\Zarządzanie Reklamacjami\Reklamacje do dostawców 2015\" & DOSTAWCA & "\LR15" & NUMEREK & "\ (1).JPG").Select

    Nie wiem jak nazwy zdjęc, tylko dwie szpacji przed (1) myslim nie trzeba.
    U mnia na wszystkich sciezkach dziala. Sprobuj jeszcze sciezku w apostrofy'

    0
  • #21 12 Sty 2016 13:07
    adamas_nt
    Moderator Programowanie

    Myślę, że to będzie jakiś drobiazg. Brak slash'a Np...
    Przypisz ciąg do zmiennej i przeanalizuj (lub debug.print).

    Czy, jeśli podstawisz do Dir, przechodzi, czy zwraca błąd?

    0