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

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

13 Sie 2014 19:19 5343 24
  • Poziom 6  
    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: vb
    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. :)
  • Poziom 6  
    Kompletnie nie wiem o co chodzi, zmieniłem tak:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    ...
    Kod: vb
    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: vb
    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.
  • Poziom 6  
    Ok mam już coś takiego

    Kod: vb
    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: vb
    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. :)
  • Poziom 6  
    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)
  • Poziom 34  
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Nie zauważyłem, że dałeś ' na początku.
  • Poziom 6  
    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.
  • Poziom 34  
    Umieść może plik na forum, będzie łatwiej zrozumieć, co autor miał na myśli.;)
  • Poziom 6  
    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: vb
    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". :)
  • Poziom 34  
    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.
  • Poziom 6  
    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ć? :)
  • Poziom 6  
    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. :)
  • Poziom 6  
    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?
  • Poziom 6  
    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.
  • Poziom 34  
    Cytat:
    makro kończy działanie, nie wiem kompletnie czemu.


    A gdzie to makro? Nic nie widać.;)
  • Poziom 6  
    Kod: vb
    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.
  • Poziom 6  
    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: vb
    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).
  • Poziom 33  
    sprawdź to

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 6  
    Działać działa, ale błąd nadal jest. Mimo wszystko + daję, bo wklejanie samych wartości też mi się przyda. :)
  • Poziom 33  
    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?
  • Poziom 6  
    Dokładnie ten sam co w załączniku. W sumie to jest komunikat, nie błąd, moja pomyłka :)
  • Poziom 33  
    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
  • Poziom 6  
    No nie powinno, ale jednak :)