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.

[Rozwiązano] Makro pobierające dane z pliku - Pobieranie danych z Pliku do odczytu za

11 Gru 2019 19:02 801 30
  • Poziom 7  
    Poszukuje makra które będzie pobierać dane z pliku Do odczytu,zassanie ma być do Excela.
    Problemem jest to że plik za każdym razem ma inną końcówkę w nazwie ( np Historia20191206 -123 ;Historia20191207 -155 itd)
    Poszukuje sposobu zapisu ścieżki w której jednym elementem stałym w nazwie jest określenie "Historia" ,dodam że pochodzą z programu "IFS"
    Nadmienię że moja wiedza z vba jest mniej niż mała, zaczynam poznawać ten ciekawy sposób zapisu.
    z Poważaniem Krzysztof B
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Pomocny post
    Moderator - Komputery Serwis
    Witaj. Polecenie Dir w VBA obsługuje wildcards, więc możesz wyszukać plików historia*.* - lub jeśli są bez rozszerzenia to historia*. - i jeśli jest tylko jeden plik - zrobić z nim dalej, cokolwiek Kolega chce, a jeśli jest więcej plików pasujących do wzorca - to według jakiegoś kryterium wybrać sobie plik, który chce Kolega przetwarzać.

    https://trumpexcel.com/vba-dir-function/#Using-Wildcard-Characters-with-DIR-Function
  • Pomocny post
    Poziom 29  
    jakb59 napisał:
    pochodzą z programu "IFS"

    Niewiele to mówi, programów ERP jest trochę na rynku - jakie to pliki: tekstowe, xml, html, binarne ?
  • Poziom 7  
    Dziękuję za zaangażowanie w moja prośbę,sprawdzę zaproponowane rozwiązanie
    z poważaniem Krzysztof
    Ps.to pliki do odczytu w .xls

    Dodano po 2 [godziny] 7 [minuty]:

    Jeżeli miał by ktoś ochotę wykonać takowe makro co pobiera z otwartego pliku Do odczytu.
    Nadmienię że elementem stałym w Pliku jest jest nazwa "Historia" (połączona z zmieniającymi siecyframi np 20191205_123456)
    Będę wdzięczny za pomoc bezinteresowną.:)
    Jestem w początkowej fazie uczenia się vba i miło by przy tym zamieścić opisy .
    Z poważaniem Krzysztof B
  • Pomocny post
    Poziom 29  
    Uściślij:
    1. Czy pliki zostały już otwarte z danego katalogu i przebywają sobie w tle programu, co sugerowałoby to co napisałeś ("pobiera z otwartego pliku") ?
    2. Czy też pliki trzeba dopiero otworzyć z danego katalogu ?
    3. Jeśli trzeba, to czy jest to katalog tylko "jednopoziomowy", czy też znajdują się w nim podkatalogi, z których też należy otwierać pliki ?
    4. Czy pliki xls są "Tylko Do Odczytu" po zapisie ich tylko do odczytu z poziomu excela ?
    5. Czy też są one plikami tylko do odczytu z "Tylko Do Odczytu" ustawionym na poziomie pliku w danym katalogu ?
    6. Czy też może i jedno i drugie ?
    7. Co jest źródłem danych, tj. jaki arkusz i jaki zakres komórek w nim ?
    8. Lub jeśli jest to "bliżej nieokreślone" (z różnych względów) czy dane mogą być pobierane tylko z pierwszego arkusza w zeszycie, z tzw. bieżącego obszaru, którego początkiem jest komórka "A1", a reszta znajduje się w ciągłym bloku obok tejże komórki ?
    9. Dokąd mają być kopiowane dane ?
  • Pomocny post
    Poziom 38  
    Tematów na Elektrodzie o imporcie plików do Excela jest całe mnóstwo.
    Przykładowy kod:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 7  
    lanzul napisał:
    Uściślij:
    1. Czy pliki zostały już otwarte z danego katalogu i przebywają sobie w tle programu, co sugerowałoby to co napisałeś ("pobiera z otwartego pliku") ?
    2. Czy też pliki trzeba dopiero otworzyć z danego katalogu ?
    3. Jeśli trzeba, to czy jest to katalog tylko "jednopoziomowy", czy też znajdują się w nim podkatalogi, z których też należy otwierać pliki ?
    4. Czy pliki xls są "Tylko Do Odczytu" po zapisie ich tylko do odczytu z poziomu excela ?
    5. Czy też są one plikami tylko do odczytu z "Tylko Do Odczytu" ustawionym na poziomie pliku w danym katalogu ?
    6. Czy też może i jedno i drugie ?
    7. Co jest źródłem danych, tj. jaki arkusz i jaki zakres komórek w nim ? - Odp.zakres jest zmienny. Stałe to 4 kolumny
    8. Lub jeśli jest to "bliżej nieokreślone" (z różnych względów) czy dane mogą być pobierane tylko z pierwszego arkusza w zeszycie, z tzw. bieżącego obszaru, którego początkiem jest komórka "A1", a reszta znajduje się w ciągłym bloku obok tejże komórki ?
    9. Dokąd mają być kopiowane dane ?


    Posiadam plik Excela z rozszerzeniem makr o nazwie "Dane " i w nim Ukryty zeszyt zatytułowany "PobraneDane".
    Potrzebuje pobierać dane zawarte w piku Tylko Do Odczytu otwieranego z programu obsługującego przez firmę (IFS) jako .xls ( otwierany jest tylko na ten czas pobrania danych). Idea jest taka aby za jednym kliknięciem w makro zostały wklejone do Excela(PobraneDane) z zeszytu Do Odczytu (jest tylko jeden Czyli wklej zeszyt do zeszytu) . Problemem jest to że nazwa pobieranego pliku z IFS jest zmienna ,choć początek jest stały czyli "Historia_21191209 -te cyfry to cześć za każdym razem inna.
  • Poziom 29  
    Na wstępie - nie klikaj "Pomógł" tylko dlatego, że ktoś odpowiedział w "temacie" - zostaw to na rzeczywistą pomoc "w tym temacie", a teraz:

    Podsumujmy:
    1. Nie chodzi o otwieranie pliku z dysku, tylko o identyfikację pliku "xls" otwartego już w pamięci komputera
    2. Plik ten generowany/"otwierany" jest tylko tymczasowo z programu IFS - celem pobrania z niego danych
    3. Identyfikatorem "bycia źródłem danych" jest pierwszy człon nazwy: "Historia" - bo potem to różnie podajesz: raz z "_" po "Historia" a raz bez
    4. Dane mają być pobrane do pliku "Dane.xlsm" do arkusza "PobraneDane" (który dodatkowo jest ukryty)

    Teraz jeszcze pytanie takie, dwuczęściowe:

    Czy jak wszystko jest "pootwierane" - i "Historia", i "Dane.xlsm" - to czy masz obydwa te okna/pliki/zbiory ("Historia" i "Dane") dostępne w jednym oknie programu Excel ?
    Czy też w dwóch różnych, niezależnych od siebie, i z poziomu okna jednego pliku nie widzisz drugiego pliku ?

    Ten poniższy kod sprawdzi ci, czy w jednej instancji excela, pośród pootwieranych w nim plików = zeszytów, znajduje się jakiś, który ma w nazwie "Historia".
    Przy okazji możesz sobie pogmerać w wieloznakach dla schematu nazwy pliku "Historia".
    Jeśli okaże się, że kod nic nie znalazł (odpowiedni komunikat), tzn. że pliki znajdują się w dwóch różnych instancjach excela i trzeba będzie się pobawić funkcjami API.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Ps.:
    Jeśli plik "Historia...coś_tam... coś_tam" ma rozszerzenie typu "xls", "xlsm", itp., to znaczy że został zapisany gdzieś na dysku, w jakimś katalogu i zawsze będzie się można do niego dostać poprzez ten katalog. O ile oczywiście sam program IFS nie ma mechanizmu takiego, że go kasuje z dysku.
  • Poziom 7  
    Dziękuję za włożony wkład pracy, jak wrócę z urlopu do pracy sprawdzę zaproponowane rozwiązanie. Dam znać czy działa.
    z poważaniem Krzysztof
  • Pomocny post
    Poziom 29  
    To na razie jeszcze nie jest rozwiązaniem ... : )
  • Poziom 7  
    Będę musiał chyba zrezygnować z dalszego poszukiwania rozwiązania. To mnie przerasta ponieważ jest to program JFS o oprogramowaniu z ERP ,a ja nie potrafię z takim programem sobie poradzić.
    Dziękuję wszystkim za zaangażowanie.
  • Pomocny post
    Poziom 38  
    Cytat:
    To mnie przerasta

    Zawsze można napisać gotowca.
  • Poziom 7  
    Jeżeli to nie kłopot to czemu nie?

    Dodano po 27 [minuty]:

    Na razie jestem na wolnym , jak będę w pracy to postaram się podesłać
    Nadmieniam że pliki IFSpobierane są z sieci a logowanie jest przez stronę internetową. Pliki do odczytu są jak by poza komputerem.
    Nie widziałem ścieżki otwartego pliku xls zaś mogę go zaznaczyć i pobrać na zasadzie kopiuj wklej (fizycznie).
    z poważaniem Krzysztof
  • Poziom 38  
    Cytat:
    Pliki do odczytu są jak by poza komputerem

    Plik może być na serwerze, ale jest ładowany lokalnie, skoro masz do niego dostęp, a więc jest otwierany Excel, a więc można się odwołać do obiektu Windows().
  • Poziom 7  
    Witam.
    Mam pytanie czy poniższy kod można zmodyfikować tak aby pobierał i wklejał dane z pliku tylko wybrane kolumny w oparciu o nazwę zawartą w pierwszym wierszu. np kol "B" Kom-A1"ZAKRES DAT " kol Kom...."Il Zam Kr" kol Kom-enta "INDEKS"' - tak jak wspomniałem wcześniej kolumny z pliku pobieranego mogą mieć rożne położenia. ( dobrze aby miały kolejność wklejania była według własnych potrzeb).
    Dziękuję z poważaniem Krzysztof
    Kod
    Windows("ZAMÓWIENIE ").Activate
    Worksheets("KOL_4").Activate
    Cells.Select
    Selection.ClearContents
    Set a = ActiveSheet
    For Each w In Application.Windows
    n = w.Caption
    If Left(n, 38) = "RaportpodręcznyZamówienianaprodukcjePK" Then
    Windows(n).Activate
    ow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A1:Z" & ow).Copy a.[A1]
    Windows(n).Close

    Exit For

    End If

    Next
    End Sub
  • Poziom 38  
    Cytat:
    np kol "B" Kom-A1"ZAKRES DAT " kol Kom...."Il Zam Kr" kol Kom-enta "INDEKS"'

    Mówisz jakimś niezidentyfikowanym dialektem.:)
  • Poziom 7  
    Mam na myśli to że w pliku z którego są kopiowane dane w komórkach pierwszego wiersza są nazwy kolumn.
  • Poziom 38  
    Cytat:
    w komórkach pierwszego wiersza są nazwy kolumn

    To bardzo dobrze. Co dalej?
  • Poziom 7  
    Potrzebuje makro które skopiuje kilka kolumn z pliku ,a konkretnie trzy kolumny w oparciu o nazwy tych kolumn. do innego pliku.- oba są uruchomione w trakcie operacji
  • Poziom 29  
    No dobrze, oba są uruchomione, ale miałeś sprawdzić, czy w jednej instancji excela, czy w dwóch ?
  • Pomocny post
    Poziom 38  
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    To tylko przykład...

    Dodano po 23 [minuty]:

    To już plików historia nie ma?;)
  • Poziom 7  
    Plik Historia jest ataki sam jak "RaportpodręcznyZamówienianaprodukcjePK" i posiada kolumny w których nazwy kolumn są zawarte w pierwszym wierszu. Każdy pracownik ma własne ustawienia (inna kolejność ustawień kolumn lecz nazwy sa dalej przypisane do nich).
    do pobierania danych używam kodu;Windows("ZAMÓWIENIE ").Activate
    Worksheets("KOL_4").Activate
    Cells.Select
    Selection.ClearContents
    Set a = ActiveSheet
    For Each w In Application.Windows
    n = w.Caption
    If Left(n, 38) = "RaportpodręcznyZamówienianaprodukcjePK" Then
    Windows(n).Activate
    ow = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A1:Z" & ow).Copy a.[A1]
    Windows(n).Close

    Exit For

    End If

    Next
    End Sub
    i potrzebuje makro zmodyfikować aby pobierało tylko te kolumny co mnie interesują według nazwy zawartej w pierwszym wierszu danych kolumn. np jak nazwa jest w wierszu pierwszym to kolumna z nazwą zmienia za każdym otwarciem pliku położenie raz to kol pierwsza a raz drugi lub piaty. (stały element to przypisana nazwa kolumny )
  • Poziom 38  
    Ile masz na raz otwartych plików zaczynających się na "RaportpodręcznyZamówienianaprodukcjePK"?
    Z kodu wynika, że więcej niż jeden.
    Może byłbyś łaskaw opisać problem, skoro zmieniły się zasady w stosunku do głównego wątku.
  • Poziom 7  
    Pierwszy wątek już jest rozwiązany.
    Powstała nowa potrzeba usprawnienia działania makra do pobierania tylko trzech kolumn o określonej nazwie
    Otwieram tylko jeden plik i po zassaniu pliku ZAMÓWIENIA jest zamykany przez makro.
  • Poziom 7  
    Jeszcze raz. Potrzebuje makro które będzie pobierać z pliku Excel. xls. tylko do odczytu . Po otwarciu pliku makro powinno do excela kopiować tylko kolumny po nazwach ( idzie o trzy kolumny) . Kod jaki wkleiłem pięknie pobiera plik xls do odczytu tylko że w całości a ja potrzebuje aby pobierało tylko określone kolumny po nazwach przypisanych do nich w wierszu pierwszym. Powodem poszukiwania jest to że po aktualizacji programu kolumny mogą zmieniać swoja lokalizacje w zeszycie ( raz kol o nazwie index jest jako pierwsza , a innym razem jako ostatnia0

    https://www.elektroda.pl/rtvforum/viewtopic.php?p=13626813#13626813 Da się go przerobić aby trzy określone kolumny były bez wyboru ich w oknie.
  • Poziom 29  
    jakb59 napisał:
    makro które będzie pobierać z pliku Excel. xls

    : ( ... swobodna kombinacja przedalpejska ... nawet nazw tych kolumn nie znamy ... może z wyjątkiej jednej "Index" ... makro też nie od początku zapodane, tylko jakieś takie jak po spotkaniu z samurajem .. : ( ... ogólnie to na niewiedzę informacji cierpimy, ale spróbuj ... moooże będzie działać (?):
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Edycja:

    Aleś mi się wstrzelił z tą wysyłką ... :) ...
  • Poziom 7  
    Na razie próbuję lecz wyskakuje mi inf "Nie można przypisać obiektu źródłowego"

    Dodano po 2 [godziny] 11 [minuty]:

    A dało by się coś zrobić z plikiem "test21"
  • Poziom 7  
    Nie mogę sobie poradzić.
    Niestety wyskakuje informacja "Nie można przypisać obiektu źródłowego".
    a potrzebował bym dowiedzieć się co może w nim nie styka.
    Jeżeli można prosić o pomoc to z góry dziękuje

    Dodano po 13 [minuty]:

    [quote="PRL"]
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Plik działa a wkleja tylko do jednego aktywnego arkusza.
    Jeżeli nie było by dużym obciążeniem aby uruchamiać wklejanie z pliku "Excela do odczytu" z zmienną nazwą pliku tak jak wcześniej udało się problem rozwiązać. Z góry dziękuję. Krzysztof Bruszewski