Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

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

matthias_kr 18 Oct 2015 19:10 1374 7
  • #1
    matthias_kr
    Level 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:

    Code: vbscript
    Log in, to see the code


    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
  • Helpful post
    #2
    Flesz
    Level 22  
    matthias_kr wrote:

    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 :
    Code: vbnet
    Log in, to see the code


    Ad2
    Code: vbnet
    Log in, to see the code


    Ad3 Pętla For
    Np :
    Code: vbnet
    Log in, to see the code

    wypróbuj ten kod to zrozumiesz



    Ad4 - kombinuj, kombinuj - jak się nie poddasz to wykombinujesz :)
  • #3
    matthias_kr
    Level 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ć
    Code: vbnet
    Log in, to see the code
    ?

    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.
  • #4
    Flesz
    Level 22  
    Quote:

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

    Code: vbnet
    Log in, to see the code


    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:
    Code: vbnet
    Log in, to see the code


    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.

    Code: vbnet
    Log in, to see the code
  • #5
    JRV
    VBA, Excel specialist
    Flesz wrote:
    While (a1.cells(a,1)="") ' pętla dopóki komórka
    Flesz wrote:
    do ' koniec pętli

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

    Ponadto na początku Do, koniec Loop
  • #6
    Flesz
    Level 22  
    JRV wrote:
    Flesz wrote:
    While (a1.cells(a,1)="") ' pętla dopóki komórka
    Flesz wrote:
    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:)
  • #7
    matthias_kr
    Level 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.



    Code: vbscript
    Log in, to see the code


    Dzieki!
    Mateusz
  • #8
    clubs
    Level 37  
    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