logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VBA Excel - Pobieranie ścieżki pliku oraz podgląd w oknie

Koczi92 13 Sie 2014 19:19 7944 24
REKLAMA
  • #1 13874943
    Koczi92
    Poziom 8  
    Posty: 19
    Witam.

    Jestem "świeży" w VBA, dopiero od tygodnia w tym siedzę. Mam zrobić arkusz, który będzie kopiował kolumny z różnych plików, które niekoniecznie będą znajdowały sie w tym samym katalogu, co program.

    Co już mam:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Algorytm prosty, do komórek wbijam funkcję "=ścieżka[nazwa]arkusz!$kolumna$wiersz".
    W czym problem? Z pełnej ścieżki pliku (pobieram z guziczka "przeglądaj") potrafię wyjąć nazwę pliku (funkcja Nazwa), ale nie potrafię wyjąć samej ścieżki bez nazwy. Próbowałem kilka funkcji (widoczne) ale nie chciały mi współpracować.
    Drugi problem. Nie próbowałem jeszcze tego robić, ale wiem, że bez pomocy się nie obejdzie. Mianowicie chodzi mi o to, żeby po wyborze pliku w okienku przy użyciu "przeglądaj" (ścieżka idzie do TextBox1) w oknie wyświetlone zostały dwie kluczowe informacje (2 komórki) z wpisanej w TextBox4 nazwy kolumny. Da się zrobić taki podgląd? Wystarczy mi dynamicznie generowany podgląd 2 komórek w oknie, ew jak nie dynamicznie, to nawet po wciśnięciu "podgląd".

    Z góry dzięki wielkie za pomoc. :)
  • REKLAMA
  • #2 13876525
    Koczi92
    Poziom 8  
    Posty: 19
    Kompletnie nie wiem o co chodzi, zmieniłem tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    ...
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I choć funkcja Link(TextBox1.Text) podaje mi ścieżkę bez nazwy pliku (sprawdzałem C:\Katalog\ zamiast C:\Katalog\Plik.xls) to jednak VB przy próbie wykonania tego kroku wyrzuca mi 1004. Gdzie jest problem?

    edit Nie wierzę... wystarczyło dodać dwa apostrofy i przez to moja praca stała od wczoraj...
    Kod: text
    Zaloguj się, aby zobaczyć kod



    Jednak wciąż nie mam pomysłu jak w TextBox wrzucić podgląd wczytywanych danych, bo o ile do komórki tę formułę mogę wrzucić, tak w nieaktywnym (znaczy nieedytowalnym) TextBoxie raczej to nie zadziała, więc wciąż proszę o pomoc.
  • #3 13886463
    Koczi92
    Poziom 8  
    Posty: 19
    Ok mam już coś takiego

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Pierwsza pętla pobiera wartość 12 pierwszych kolumn z kolumny C wskazanego nieuruchomionego pliku o podanej ścieżce.
    Druga pętla pobiera wartości z wybranej kolumny, wybranego nieuruchomionego zeszytu.
    Zeszyty nie są włączone, znajdują się pod dowolną ścieżką, a wklejane wartości nie formatują komórek. No i w tym IFie wyłączam komórki, których kopiować nie chcę. Tutaj w sumie wszystko już mi gra, przy czym przydałoby mi się dodać warunek, żeby nie wklejało pustych pól, bo teraz zamiast "null" wszędzie mam 0 i nie wiem jak ten warunek ma wyglądać.
    I przydałaby się też funkcja, że jeżeli komenda nie może znaleźć pliku/arkusza to wyskakuje błąd w okienku i przerywa pętlę, tego też nie wiem jak zrobić.

    Najważniejsze co mi teraz pozostało, to najważniejsze, to robienie takiego jakby podglądu.
    UserForm wygląda tak - http://www.iv.pl/images/24059514775543047743.jpg
    I chcę teraz, żeby albo w labelu albo w textboxie, po wciśnięciu "podgląd" pokazało mi też z zamkniętego pliku wartość danej komórki.
    Próbowałem coś takiego:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Ale wyskakuje błąd 380. Jak robię bez wartości ControlSource, to wyskakuje mi pełna formuła, z wartościami zmiennych, zamiast wartości tej komórki. :)
  • #5 13887109
    Koczi92
    Poziom 8  
    Posty: 19
    Wciąż to samo. Jak na zdjęciu, pokazuje mi treść formuły, a nie wartość, którą wywołuje (tutaj powinno być 9, bo tyle jest wpisane w komórkę C24)
    Załączniki:
    • bez__tytu__u.JPG (20.15 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #7 13889480
    Koczi92
    Poziom 8  
    Posty: 19
    Po wklepaniu tego wciąż jest to samo, ale dzięki za próbę pomocy. :)
    Ale problem rozwiązany, po prostu zrobiłem drugi arkusz, do którego wczytuję potrzebne mi dane i z niego wyświetlam w okienku. :)


    Teraz tylko zostaje to: "I przydałaby się też funkcja, że jeżeli komenda nie może znaleźć pliku/arkusza to wyskakuje błąd w okienku i przerywa pętlę, tego też nie wiem jak zrobić. "

    Standardowa nazwa arkusza pliku, który będzie sczytywany to "Input", ale wiadomo idioto-odporność się ceni i żeby po wybraniu niepoprawnego pliku wyskoczył błąd "Wybrano niepoprawny plik" i przerwał działanie makra. W przeciwnym wypadku, jak ktoś wybierze błędny plik, to będzie musiał ponad 250 razy wyłączyć okno do przeglądania pliku, co w przypadku niezbyt ogarniętych informatycznie osób, może skończyć się nawet pomysłem, by komp zresetować, a to jest trochę problematyczne w pracy, gdzie bywają napięte sytuacje czasowe.
  • REKLAMA
  • #9 13889914
    Koczi92
    Poziom 8  
    Posty: 19
    Plik co chwila poprawiam, więc też niewiele da i w sumie nie wiem czy mogę to tak rozpowszechniać, bo to w pracy jest :)

    O co mi chodzi... W załączniku wygląd okna. Dałem już blokadę na wybranie pliku o rozszerzeniu innym niż .xls, pozostawienie pustych pól, oraz wybór innej kolumny niż C-F.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Tak wygląda wczytywanie komórki. Arkusze używane w pracy domyślnie nazywają się "Input" i tylko z plików z takimi arkuszami ma współpracować program. I chcę teraz zablokować możliwość wyboru plików .xls, do których już zawęziłem, w których nie istnieje arkusz o nazwie "Input". :)
    Załączniki:
    • bez__tytu__u.JPG (33.98 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #10 13890036
    PRL
    Poziom 41  
    Posty: 6977
    Pomógł: 953
    Ocena: 913
    Cytat:
    I chcę teraz zablokować możliwość wyboru plików .xls, do których już zawęziłem, w których nie istnieje arkusz o nazwie "Input".


    Wklej więc kod, który obsługuje otwieranie plików.
    Pomogłem? Kup mi kawę.
  • #11 13890045
    Koczi92
    Poziom 8  
    Posty: 19
    Heh, gdyby to było tak proste... :)
    Haczyk właśnie jest w tym, że nie otwieram plików i pytam, czy bez otwierania pliku można to sprawdzić? :)
  • REKLAMA
  • #13 13894920
    Koczi92
    Poziom 8  
    Posty: 19
    Za dużo trochę kodu, sama ta procedurka ma więcej, niż całość, którą napisałem, więc chyba odpuszczę. Ale dzięki za pomoc, łapka leci. :)
  • #14 13905457
    Koczi92
    Poziom 8  
    Posty: 19
    Inny problem. Jak wkleić dane ze skoroszytu1 do zamkniętego skoroszytu2? Można w ogóle coś takiego zrobić? Bo zrobienie tego w drugą stronę (sczytanie danych z zamkniętego excela) to nie problem, ale czy można w jakiś sposób eksportować dane do zamkniętego pliku?
  • #16 13905819
    Koczi92
    Poziom 8  
    Posty: 19
    Tak myślałem, że z zamkniętym się nie da...
    Ale problem jest też taki, że po uruchomieniu wskazanego pliku dalsze procedury nie zaskakują. Po prostu uruchamia się i koniec.
    " Workbooks.Open Filename:="C:\Documents and Settings\rb20476\Pulpit\excel.xls", ignorereadonlyrecommended:=True "
    Jak usunę tę linijkę i sam ręcznie włączę to wszystko jest ok. Z tym poleceniem po prostu otwiera się "excel.xls" i makro kończy działanie, nie wiem kompletnie czemu.
  • #18 13905864
    Koczi92
    Poziom 8  
    Posty: 19
    Kod: text
    Zaloguj się, aby zobaczyć kod


    No, i jak usunę "Workbooks.Open Filename:="C:\Documents and Settings\rb20476\Pulpit\excel.xls", ignorereadonlyrecommended:=True" i ręcznie otworzę program, to wszystko śmiga ładnie, jak to makro otworzy plik, to kończy się działanie od razu po tej komendzie.
  • #19 13912093
    Koczi92
    Poziom 8  
    Posty: 19
    Powyższe problemy naprawione, teraz tylko ostatnia rysa do poprawy. Mianowicie, przy otwieraniu pliku wyskakuje mi komunikat (w załączniku), nie zawsze wyskakuje na wierzchu, czasem w tle i blokuje działanie programu, a nieuważny człek może go nie wykryć. Kod wygląda mniej więcej tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Gdzie TextBox1 to wskazana kolumna, a TextBox2 to ścieżka do pliku.

    Opcje logicznie przychodzą mi na myśl dwie:
    1. Wyłączenie wszystkich komunikatów na czas działania makra - jak widać Application.DisplayAlerts nie działa (albo ja to źle używam).
    2. Zmiana metody wklejania na PasteValues (nie wiem jak to zrobić przy zachowaniu powyższej formy).
    Załączniki:
    • VBA Excel - Pobieranie ścieżki pliku oraz podgląd w oknie blad.gif (14.35 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #20 13912962
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    sprawdź to

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #21 13914953
    Koczi92
    Poziom 8  
    Posty: 19
    Działać działa, ale błąd nadal jest. Mimo wszystko + daję, bo wklejanie samych wartości też mi się przyda. :)
  • #22 13915087
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Koczi92 napisał:
    Działać działa, ale błąd nadal jest. Mimo wszystko + daję, bo wklejanie samych wartości też mi się przyda. :)


    a jakie błędy teraz sa?
  • #23 13924764
    Koczi92
    Poziom 8  
    Posty: 19
    Dokładnie ten sam co w załączniku. W sumie to jest komunikat, nie błąd, moja pomyłka :)
  • #24 13924811
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Koczi92 napisał:
    Dokładnie ten sam co w załączniku. W sumie to jest komunikat, nie błąd, moja pomyłka :)


    To dziwne bo przy wklejaniu wartości nie powinno być komunikatu że wkleja formuły
  • #25 13928237
    Koczi92
    Poziom 8  
    Posty: 19
    No nie powinno, ale jednak :)

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zadał pytanie dotyczące użycia VBA w Excelu do kopiowania danych z różnych plików, które mogą znajdować się w różnych lokalizacjach. W trakcie dyskusji przedstawiono problemy związane z formułami, błędami wykonania oraz sposobami na podgląd danych w TextBoxie. Użytkownik zrealizował funkcję Link do pobierania ścieżki pliku, jednak napotkał trudności z wyświetlaniem wartości zamiast formuły. W końcu zaproponowano rozwiązanie polegające na utworzeniu drugiego arkusza do wczytywania danych oraz dodaniu obsługi błędów, aby program informował o niepoprawnych plikach. Użytkownik również pytał o możliwość eksportowania danych do zamkniętego skoroszytu, co okazało się niemożliwe bez otwierania pliku.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA