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.

Excel-makro-kopiuj i wklej do nowo utorzonego arkusza jeśli suma >20

08 Wrz 2017 09:34 1599 26
  • Poziom 3  
    Cześć,

    Chcę stworzyć makro, który sumuje dane w komórkach kolumny P i w momencie gdy suma przekroczy 20 otwiera nowy skoroszyt i wkleja do określonego arkusza zakres komórek A1:Sn+1 lub całe wiersze 1:n+1. Po czy sprawdza dalej, aż do ostatniej aktywnej komórki.

    Udało mi się stworzyć coś takiego, ale niestety wyrzuca mi błąd :(

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Bardzo prosze o pomoc!
  • Poziom 3  
    Run-time error: '1004':
    Method 'Range' of object 'Global' failed

    Dodano po 27 [minuty]:

    Język to VBA nie jestem pewna jaki syntax mam wybrać
  • Poziom 38  
    A cóż to ma być: Range("n+1:n+1").Select ? ;)
  • Poziom 3  
    Chciałam, zeby zaznaczyło mi wiersze od 1 do n+1 :)
    Ewentualnie, aby zaznaczyło obszar A1:Sn+1
    Jendak jak próbuje zrobić zakres zaznaczenia Range("n:n").Select lub Range("A1:Sn+1").Select, wyrzuca mnie z Excela :/
  • Poziom 38  
    Chodzi mi o składnię. Poprawnie byłoby Range(n + 1 & ":" & n + 1).Select - nie wnikając, co ma być zaznaczone.
  • Specjalista - VBA, Excel
    Range(" A1:S" & n+1 ).Select

    Dodano po 2 [minuty]:

    lub
    Range("1:" & n+1).Select
  • Poziom 3  
    Range(" A1:S" & n+1 ).Select tak próbowałam i wyrzuciło mnie z Excel :(

    Chodziło mi o wiersze lub komórki A:Sn+1

    Przy wszystkich zaproponowanych wyrzuca mnie z Excela.

    Natomiast przy zastosowaniu Rows("n:n").Select wyrzuca błąd:
    Run-time error: '1004':
    Application-defined or object-defined error :(
  • Poziom 2  
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Specjalista - VBA, Excel
    Kiri1234 napisał:
    Range(" A1:S" & n+1 ).Select tak próbowałam i wyrzuciło mnie

    Mam nadzieje, ze przed tym byla wartosc n znalezena i > 0
    Cytat:
    For n = 0 To Cells(65536, "P").End(xlUp).Row
  • Pomocny post
    Poziom 38  
    Po pierwsze - ustaw breakpoint'y i zobacz, w którym miejscu Cie "wyrzuca".
    Po drugie - po osiągnięciu sumy >20 przechodzisz do nowego arkusza, coś tam wklejasz po czym nie wracasz do pierwotnego arkusza - a Twój kod pracuje na arkuszu w tym momencie aktywnym.
  • Poziom 3  
    Hmm a jeśli wykorzystałam poprzednie makro, które napisałam, które wstawia dodatkowy wiersz jeśli suma>20 i odwołuje się do niego.
    Natomiest nowe makro ma wyszukiwac pustego wiersza i wklejać do nowo otwartego pliku zakres 1:pusty wiersz do określonej zakłądki AERO.

    Mam coś takiego, ale wyrzuca mnie(po wstawieniu Breakpointu) w odwołaniu do otwarcia nowego skoroszytu, mim, że samo makro otwarcia działa poprawnie.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Makro Kopiuj_wklej_jeśli pusty, kopiuje mi tylko pierwszy wiersz i wyrzuca mnie kiedy jest odwołanie do Nowy_skoroszyt_1

    Dodano po 2 [godziny] 26 [minuty]:

    Udao mi si kopiowanie, do pierwszej sumy 20, ale wyrzuca mi Excela jak ma otworzyć nowego Excela :(

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Dodano po 19 [minuty]:
  • Poziom 28  
    Kiri1234 napisał:
    ...
    Udao mi si kopiowanie, do pierwszej sumy 20, ale wyrzuca mi Excela jak ma otworzyć nowego Excela :(

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Pytania / uwagi:
    Kod: vba
    Zaloguj się, aby zobaczyć kod
  • Poziom 3  
    Cześć!
    Jest aktywna zakładka Bezpieczne stąd odwołanie do arkusza aero.

    Tak, liczba wierszy może się zmieniać, stąd odwołanie do ostatniej pustej.

    Variant, bo n jest zmienną.

    Long, gdyż p to kolumna wyczytałam, że tak powinna byc oznaczona.

    Sumy nie zadeklarowałam tylko określiłam ją jako =0, wylicza poprawnie, mimo wszystko trzeba ją zadeklarować?

    Do polecanie Widnows.Activate nawet mi nie dochodzi, wyrzuca mnie przy Call Nowy_)skoroszyt_1

    Widnows.Activate zmieniłam na coś takieg:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Specjalista - VBA, Excel
    Wniosek w powyższej korespondencji:
    Jest skoroszyt Truck.xls, w nim arkusz danych Aero.
    Chceme kopiowac do nowo utworzonego skoroszytu wiersze z Sumy>20.
    Pytanie: w którym skoroszycie Truck lub nowom chceme wstawic puste wiesze?
    Lub w obu?
  • Poziom 3  
    Chcemy wstawić w nowo otwarty skoroszyt, w arkusz aero :)
  • Specjalista - VBA, Excel
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 28  
    Kiri1234 napisał:
    Variant, bo n jest zmienną.

    Long, gdyż p to kolumna wyczytałam, że tak powinna byc oznaczona.

    Sumy nie zadeklarowałam tylko określiłam ją jako =0, wylicza poprawnie, mimo wszystko trzeba ją zadeklarować?

    'a', 'p', 'n', "Suma" - to wszystko są zmienne, różnią się tylko typem danych, które są w nich "przechowywane" - w dużym skrócie, 'Variant' to typ domyślny, który "sam sobie wybiera typ danych dla zmiennej", 'Long' to typ danych liczb całkowitych "długich".
    U ciebie 'a', 'p' i 'n' są zmiennymi typu liczb całkowitych.

    'p' jako zmienna opisująca nr kolumny może być typu 'Integer', tj. przechowywać wartości dodatnie do 32767 - więcej kolumn chyba w nowych excelach nie ma.

    'Suma' - również wydaje się liczbą typu całkowitego, chociaż lepiej by było zadeklarować ją jako 'Double', czyli zmiennoprzecinkową - mogłaby wtedy przechowywać "duże" sumy, jeśli takie mogą się pojawić i jeśli mogłyby mieć część niecalkowitą - w innym przypadku wystarczy 'Long'.

    Dobrze by było deklarować wszystkie zmienne - miałabyś wtedy nad nimi kontrolę.
    Na początku modułu dobrze by było dodać 'Option Explicit', wtedy deklaracja zmiennych zostaje "wymuszona" na użytkowniku i żadna zmienna "nie ujdzie naszej uwadze".
  • Poziom 3  
    Ok, dziękuję za objaśnienei! :)
    A czemu wyrzuca mnie z Excela kiedy odwołuję się do makra Nowy_skoroszyt_1(), które samodzielnie działa poprawnie?

    Set my = Workbooks("Truck.xls").Sheets("Aero")

    wyrzuca mi błąd Run-time error "13": Type mismatch :(
  • Specjalista - VBA, Excel
    Przepraszam
    ma byc Dim my As Worksheet
  • Poziom 3  
    Teraz działa poprawnie, dziękuję!
    Tylko zależało mi, żeby z każdą kolejną osiągniętą sumą otwierał nowego Excela i wstawiał w Arkusz Aero właśnie w tym Excelu - czyli otworzył tyle Exceli ile jest sum <20
  • Pomocny post
    Poziom 28  
    Kiri1234 napisał:
    Ok, dziękuję za objaśnienei! :)
    A czemu wyrzuca mnie z Excela kiedy odwołuję się do makra Nowy_skoroszyt_1(), które samodzielnie działa poprawnie?

    Set my = Workbooks("Truck.xls").Sheets("Aero")

    wyrzuca mi błąd Run-time error "13": Type mismatch :(

    Błąd typu zmiennych - niezgodność typów.
    Duże pole do gdybania, bez "materiału porównawczego".
    Może to być spowodowane chociażby deklaracją pewnych zmiennych jako 'Variant', kiedy w podtypie tych zmiennych coś nie pasuje kompilatorowi.
    Podana przez ciebie zmienna 'my' jest typu obiektowego (Object\Worksheet) - a jak jest wykorzystana w kodzie ?
    Opisz w punktach kolejność czynności i kolejność uruchamianych makr - na razie to tu tak bardzo "na sucho" wszystko jest rozwiązywane.
    Które makra i w jakiej postaci wykorzystujesz "na tę chwilę" ?

    Dodano po 1 [minuty]:

    No proszę i już jest rozwiązanie ... :)
  • Specjalista - VBA, Excel
    Kiri1234 napisał:
    otwierał nowego Excela
    nowe wystąpienie programu Excel, lub nowy skoroszyt?
  • Poziom 3  
    Więc tak: mam skoroszyt z makrami, do którego wklejam tabele A:S z niewiadomą liczbą wierszy. Na tą chwilę makra sortują mi tą tabelę po kilku wartościach i odpowiednio rozdziela sortowane wartości po arkuszach nowo utworzonego pliku. Teraz chcę, zeby w nowym pliku, który jest zapisany Truck na pulpicie, sumował mi wartości kolumny P, otwierał nowe excele za każdym razem jak suma <=20 i wklejał te wartości do nowego Excela.

    Po kolei makra:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    I teraz właśnie przechodzę do części, żeby otwierać nowe Excele kiedy suma <=20 i wklejać te wartości tym makrem:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Specjalista - VBA, Excel
    Kiri1234 napisał:
    otwierał nowego Excela
    nowe wystąpienie programu Excel, lub nowy skoroszyt? Myslim ze skoroszyt:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Poziom 3  
    Działa poprawnie, dziękuję bardzo! :)