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.

Makro excel pętla, hasło kopiowanie.

31 Lip 2012 14:06 3597 22
  • Poziom 8  
    Witam.
    Chciał bym napisać makro które ułatwiło by mi pracę ale niestety na razie nie potrafię znaleźć rozwiązania ponieważ nigdy wcześniej nie korzystałem z makr. Sytuacja wygląda następująco.

    W folderze znajduje się n plików zabezpieczonych przed otwarciem hasłem a. Chciałbym aby makro ze wszystkich plików xls z folderu przekopiowało wiersze od 3 do końca tyle ile niepustych w wierszu A.

    trzeba chyba wykorzystać Range(Selection, Selection.End(xlDown)).Select ale nie mam pojęcia jak ominąć hasła i jaki kod zastosować aby makro skopiowało zakres ze wszystkich plików.

    Na pewno odwdzięczę się za pomoc.
  • Moderator Programowanie
    vitalis88 napisał:
    ale nie mam pojęcia jak ominąć hasła i jaki kod zastosować aby makro skopiowało zakres ze wszystkich plików.
    1. Hasła trzeba znać, nie omijać. No, może z nielicznymi wyjątkami. Poszukaj informacji o ExecuteExcel4Macro
    2. Jest kilka przykładów na forum. Np Link1, Link2.

    vitalis88 napisał:
    Na pewno odwdzięczę się za pomoc.
    Hmm, czytałem o przesyłaniu zapachów (jakiś chemiczny generator na końcu), ale płynów? :D
  • Poziom 8  
    Oczywiście znam hasło tylko chcę aby przy kopiowaniu z wielu plików makro samo je wprowadzało bo jak na razie moje makro otwiera plik ale nie wiem jakim kodem sprawić, żeby je samo wpisywało. Wszystkie pliki są chronione jednym hasłem.

    Dzięki za linki, chyba uda mi się coś spłodzić.
  • Moderator Programowanie
    vitalis88 napisał:
    Oczywiście znam hasło
    To nie ma problemu. Password oraz WriteResPassword są opcjonalnymi argumentami metody Workbooks.Open.
    Jeszcze fajniej, jeśli na wszystkie pliki identyczne...
  • Poziom 8  
    Na razie mam

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Potrzebuję dalszej pomocy bo nie kumam za bardzo co mam zrobić, żeby działała pętla.
  • Moderator Programowanie
    Nie ma pętli, więc nie będzie "pętlić" ;)

    Porównaj przykład ze swoim
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Nic się nie dzieje :( Czy tu brakuje komend do wklejania do nowego arkusza? Nie raportuje błędu ale nic się nie kopiuje.
  • Moderator Programowanie
    Sprawdź wartość zmiennej plik przed pętlą. Jeśli pusta, to nieprawidłowy lub pusty folder...
  • Poziom 8  
    Przykro mi ale nie rozumiem :cry: Nie prosi też o podanie hasła.

    Mam tu coś uzupełnić?
    Do While plik <> ""

    Teraz działa już coś ale wyskakuje błąd przy
    wrs = dWkb.Sheets(dArk).Range("A" & Rows.Count).End(xlUp).Row + 1

    Method rows of object global failed
  • Moderator Programowanie
    vitalis88 napisał:
    Przykro mi ale nie rozumiem
    Uruchom krokowo (w edytorze VB klawiszem F8), "najedź" kursorem na zmienną, to pokaże wartość.

    U mnie pierwszym plikiem w C:\Proba\ jest:

    Makro excel pętla, hasło kopiowanie.
  • Poziom 8  
    U mnie wskazuje plik=""
    W folderze są 4 pliki xls
    Marko mieli pliki ale wysypuje się na
    wrs = dWkb.Sheets(dArk).Range("A" & Rows.Count).End(xlUp).Row + 1
  • Moderator Programowanie
    Otwórz lokalizację w Eksploratorze i zobacz ścieżkę. Q: to dysk lokalny, sieciowy, usb?

    Nie może mielić. Warunkiem pętli jest plik<>""
  • Poziom 8  
    Sieciowy z ograniczeniami dostępu. Do jakiego pliku to makro ma skopiować zawartość? Do dowolnego gdzie je odpale?

    Widac ze makro odpala pliki, reaguje kiedy wpisuje bledne haslo tylko nie widac nigdzie efektu kopiowania.

    W każdym razie już blisko jest sukcesu :)
  • Moderator Programowanie
    Kopiowanie przypisane jest do A1 w dół w aktywnym arkuszu. Przejdź makro krok po kroku [wspomniane F8], obserwuj co się dzieje (jakie wartości przypisywane są do zmiennych).

    Czy nie lepiej byłoby zamapować lokalizację sieciową i odnosić się do skrótu?
  • Poziom 8  
    Coś tam pozmieniałem i działa tyle, że kopiuje ciągle w to samo miejsce i w efekcie końcowym przekiopowana jest tylko zawartość ostatniego pliku. Co jest źle?
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Post poprawiłem. [adamas_nt]
  • Moderator Programowanie
    Spróbuj
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Niestety ostatnie makro nie daje żadnego efektu końcowego. Jedyny problem jak przesunąć miejsce wklejania o jeden w dół.

    Kod: applescript
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Moderator Programowanie
    vitalis88 napisał:
    wrs = Range("A2:D2").End(xlUp).Row + 1 'co to ma robić?
    Skoro od drugiego wiersza w górę, to... pokazuje pierwszy wiersz :)

    Uparcie drepczesz w miejscu. Na czym wysypuje się makro z postu #16?
  • Poziom 8  
    Makro z postu 16 nie wkleja kopiowanego obszaru do nowego arkusza, poza tym wszystko działa :P

    W moim poście wyżej jest już prawie takie makro jak ma być tylko żeby w arkuszu docelowym po wklejeniu kolejne kopiowania były o jeden wiersz niżej niż poprzednie.
  • Pomocny post
    Moderator Programowanie
    Tu jest szukanie ostatniego, niepustego
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    I zdaje się, że błędnie podałem kopiowanie
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Jeśli wklejasz przez ActiveSheet.Paste, to wcześniej powinieneś wybrać (Select) lewą, górną komórkę obszaru, lub cały, o tym samym rozmiarze zakres.

    Nie mam Twojego pliku docelowego, więc pisze wszystko "na czuja". Musisz analizować otrzymany "materiał do przemyślenia" i sygnalizować co, w której linijce nie działa prawidłowo.
  • Poziom 8  
    Wielkie dzięki. Udało się :) Makro wygląda tak

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Do szczęścia brakuje mi tylko żeby nie wyskakiwało pytanie o przechowywanie danych w schowku i zapisywanie zmian w plikach ze wzgledu na różnicę wersji offica ewentualnie, zeby makro samo klikalo "nie".

    Pojawil sie rowniez problem poniewaz kiedy w pliku zrodlowym dane wypelniaja tylko jeden wiersz makro zaznacza wiersze od 2 do konca arkusza przez co nie ma mozliwosci kopiowania czyli:
    Rows("2:2").Select
    Range(Selection, Selection.End(xlDown)).Select tu musialo by byc warunek np. od zaznaczonego do pierwszej pustego wiersza
  • Moderator Programowanie
    vitalis88 napisał:
    Do szczęścia brakuje mi tylko żeby nie wyskakiwało pytanie o przechowywanie danych w schowku i zapisywanie zmian w plikach ze wzgledu na różnicę wersji offica.
    1. Application.CutCopyMode = False po linii z Paste
    2. Nagraj makro zapisywania pliku w odp. wersji i wyciągnij z niego argument FileFormat:=xlCoś. Można wyłączyć ostrzeżenie: "Plik blabla już istnieje..." Np
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    3. Temat szukania ostatniego wiersza przewija się w wielu wątkach. Powinieneś wyjść nie z zakresu, ale pojedynczej komórki w kolumnie, gdzie zapisywany jest ostatni wiersz. Nagraj sobie makro z kombinacją klawiszy Ctrl+strzałka (we wszystkie kierunki) i przeanalizuj.
  • Poziom 8  
    Dzięki wielkie !!! :) Wszystko już hula poza tabelami jednowierszowymi. Żeby obejść pytanie o zapis dałem po prostu .Close False