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.

Excel-Makro - Makro służące do generowania kolejnych plików

18 Paź 2015 19:10 1062 7
  • Poziom 2  
    Proszę o pomoc w stworzeniu pętli w makrze, które będzie przekopiowywało komórki z Arkusz2 do Arkusz1 i zapisywało plik o nazwie B4 (jak w pliku)

    Wiem jak przekopiować komórki oraz zapisać plik w przypadku kiedy mam jeden wiersz w tabelce natomiast napotykam błąd przy stworzeniu warunków, w których będą generowane kolejne pliki.

    Na razie korzystam z takiego makra:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Celem jest wygenerowanie tylu dokumentów ile ich jest w tabelce.

    Moje pytania:
    1. W jaki sposób opisać warunek w którym pętla będzie działać aż do znalezienia pustej komórki w kolumnie B?
    2. W jaki sposób stworzyć zapis w którym komórka B1 i C1 z Arkusza1 będzie zastępowana kolejnymi komórkami z kolumny B i C z Arkusza2 i zapisywana?
    3. W jaki sposób opisać kolejne komórki (A1+i)? Nie mogę znaleźć odpowiedniego poradnika.
    4. Czy dobrze kombinuje?

    Pozdrawiam,
    Mateusz
  • Pomocny post
    Poziom 21  
    matthias_kr napisał:

    Moje pytania:
    1. W jaki sposób opisać warunek w którym pętla będzie działać aż do znalezienia pustej komórki w kolumnie B?
    2. W jaki sposób stworzyć zapis w którym komórka B1 i C1 z Arkusza1 będzie zastępowana kolejnymi komórkami z kolumny B i C z Arkusza2 i zapisywana?
    3. W jaki sposób opisać kolejne komórki (A1+i)? Nie mogę znaleźć odpowiedniego poradnika.
    4. Czy dobrze kombinuje?
    Mateusz


    na początek:
    Set a1 = ThisWorkbook.Sheets("Arkusz1")
    Set a2 = ThisWorkbook.Sheets("Arkusz2")
    ułatwi ci to życie
    Do kolejnych komórek możesz się odwoływać poprzez : a1.cells(wiersz,kolumna) - wiersz, kolumna jako liczby

    Ad1 :
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Ad2
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Ad3 Pętla For
    Np :
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    wypróbuj ten kod to zrozumiesz



    Ad4 - kombinuj, kombinuj - jak się nie poddasz to wykombinujesz :)
  • Poziom 2  
    Dzięki za pomoc. Zmieniłem trochę makro bazując na tych danych aby zapisywało plik tylko raz natomiast wciąż mam problem ze stworzeniem pętli.

    Proszę o podpowiedź w jaki sposób to zrobić.

    1.Czy użyć Do While oraz For...Next
    2.Czy użyć If...Then oraz For...Next?

    Jeszcze mam drugie pytanie, w którym momencie trzeba zastosować
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    ?

    Na początku makra czy dopiero w miejscu gdzie będę opisywał co zrobić jeżeli dana komórka nie jest pusta?

    Dzięki z góry za pomoc.
  • Poziom 21  
    Cytat:

    Jeszcze mam drugie pytanie, w którym momencie trzeba zastosować ?

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    To był tylko przykład żebyś zrozumiał jak działa pętla.

    Do komórek się odwołujesz .cells(numer wiersza, numer kolumny), są też inne sposoby, ale na razie stosuj ten.

    Pętlę zastosuj jakąkolwiek np:
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Jak masz otwarty edytor vba i klikniesz po lewej stronie na ciemniejszym pionowym pasku - pojawi się czerwona kropa - tzw breakpoint. Program ci się zatrzyma w tym miejscu, następnie klikając F8 wymuszasz krokowe działanie programu. Potem klikasz ppm na zmienną i klikasz ad watch - będziesz miał podgląd na zmienną.

    Jeżeli chcesz użyć pętli for to wpierw musisz znaleźć indeks ostatniego niepustego wiersza.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
  • Specjalista - VBA, Excel
    Flesz napisał:
    While (a1.cells(a,1)="") ' pętla dopóki komórka
    Flesz napisał:
    do ' koniec pętli

    To zawsze było na początku pętli While, koniec Wend

    Ponadto na początku Do, koniec Loop
  • Poziom 21  
    JRV napisał:
    Flesz napisał:
    While (a1.cells(a,1)="") ' pętla dopóki komórka
    Flesz napisał:
    do ' koniec pętli

    To zawsze było na początku pętli While, koniec Wend

    Ponadto na początku Do, koniec Loop


    Święta racja, kawy dzisiaj nie piłem i herezje plotę - poprawione:)
  • Poziom 2  
    Dzięki wielkie za pomoc. Zrobiłem już kopiowanie i udało mi się zapisać parę plików pod rząd natomiast teraz zestawiłem wszystko w jednym makrze i wyskakuje mi błąd.

    Tworzy mi się nowy arkusz ale o nazwie "Zeszytx" za każdym razem jak puszcze makro to x jest zwiększone o 1. Moim celem było aby plik zapisywał się pod nazwa z komórki P18.

    Po kliknięci Debug ten wiersz jest podkreślony .SaveAs Filename:=SaveAsName

    Proszę o pomoc jeszcze w tym miejscu.



    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Dzieki!
    Mateusz
  • Poziom 33  
    Witam
    Wywala ci błąd bo pewnie chce nadpisać kolejny plik bo nazwa z Range("P18") jest ta sama
    dodaj zmienną do nazwy
    SaveAsName = ThisWorkbook.Path & "\" & Range("P18") & a