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.

Makro excel pętla, hasło kopiowanie.

vitalis88 31 Lip 2012 14:06 3360 22
  • #1 31 Lip 2012 14:06
    vitalis88
    Poziom 7  

    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.

    0 22
  • #2 31 Lip 2012 18:42
    adamas_nt
    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

    0
  • #3 31 Lip 2012 20:43
    vitalis88
    Poziom 7  

    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ć.

    0
  • #4 31 Lip 2012 21:53
    adamas_nt
    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...

    0
  • #5 02 Sie 2012 13:58
    vitalis88
    Poziom 7  

    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.

    0
  • #6 02 Sie 2012 14:38
    adamas_nt
    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

    0
  • #7 02 Sie 2012 14:56
    vitalis88
    Poziom 7  

    Nic się nie dzieje :( Czy tu brakuje komend do wklejania do nowego arkusza? Nie raportuje błędu ale nic się nie kopiuje.

    0
  • #8 02 Sie 2012 15:05
    adamas_nt
    Moderator Programowanie

    Sprawdź wartość zmiennej plik przed pętlą. Jeśli pusta, to nieprawidłowy lub pusty folder...

    0
  • #9 02 Sie 2012 15:10
    vitalis88
    Poziom 7  

    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

    0
  • #10 02 Sie 2012 15:17
    adamas_nt
    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.

    0
  • #11 02 Sie 2012 15:26
    vitalis88
    Poziom 7  

    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

    0
  • #12 02 Sie 2012 15:28
    adamas_nt
    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<>""

    0
  • #13 02 Sie 2012 15:30
    vitalis88
    Poziom 7  

    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 :)

    0
  • #14 02 Sie 2012 18:13
    adamas_nt
    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?

    0
  • #15 02 Sie 2012 21:51
    vitalis88
    Poziom 7  

    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]

    0
  • #16 03 Sie 2012 08:27
    adamas_nt
    Moderator Programowanie

    Spróbuj

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #17 03 Sie 2012 09:38
    vitalis88
    Poziom 7  

    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

    0
  • Pomocny post
    #18 03 Sie 2012 10:09
    adamas_nt
    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?

    0
  • #19 03 Sie 2012 10:45
    vitalis88
    Poziom 7  

    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.

    0
  • Pomocny post
    #20 03 Sie 2012 11:19
    adamas_nt
    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.

    0
  • #21 03 Sie 2012 12:43
    vitalis88
    Poziom 7  

    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

    0
  • #22 03 Sie 2012 13:19
    adamas_nt
    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.

    0
  • #23 03 Sie 2012 13:24
    vitalis88
    Poziom 7  

    Dzięki wielkie !!! :) Wszystko już hula poza tabelami jednowierszowymi. Żeby obejść pytanie o zapis dałem po prostu .Close False

    0