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

Excel - VBA - Sumowanie wybranych danych drugiego skoroszytu

syroB89 16 Jul 2013 11:24 3582 8
  • #1
    syroB89
    Level 9  
    Witam!

    Zachęcony wczorajszymi sukcesami w rozwiązywaniu problemów z VBA chciałbym prosić was o dalszą pomoc. :)

    Mam następującą sytuację:

    Mam jeden skoroszyt o nazwie "Powierzchnie". W skoroszycie tym są różnego rodzaju budynki w kolejnych arkuszach. Na potrzeby pisania makra nazwałem arkusze "Biurowiec", "Centrum handlowe" oraz "Magazyn". Do każdego z tych arkuszy chciałbym, żeby pobierały się podczas otwierania pliku dane ze skoroszytu "Statystyka", z arkusza "Warszawa".

    W arkuszu tym w kolejnych wierszach są części poszczególnych budynków (np. Biurowiec cz. A, Biurowiec cz. B), a w kolumnach informacje o nich, np. "Powierzchnia", "Powierzchnia planowana", "Powierzchnia dostępna".

    Zadanie polega na tym, żeby do skoroszytu "Powierzchnie" pobierały się dane do odpowiednich arkuszy w odpowiednie komórki dotyczące sumarycznych powierzchni. Tj. żeby zbierały się i sumowały powierzchnie ze skoroszytu "Statystyka" dotyczące wszystkich części budynku i wklejały do skoroszytu "Powierzchnie".

    Tym razem za pomoc oferuję siano bo konia z rzędem opchnąłem wczoraj. ;)

    Dodano po 1 [minuty]:

    Dorzucam przykładowe pliki do zadania. :)
  • Helpful post
    #2
    adamas_nt
    Moderator of Programming
    Potrzebne będą dwie zagnieżdżone pętle. W przykładzie poniżej, makro porównuje nazwę arkusza z fragmentem ciągu w komórkach kolumny 'A'. Urozmaiciłeś nieco różną wielkością liter, dlatego LCase.

    Do modułu wklej
    Code: vbscript
    Log in, to see the code
    Do Thisworkbook
    Code: vbscript
    Log in, to see the code

    Przeanalizuj, dostosuj do własnych potrzeb.

    P.S. Sianem się nie wykręcisz ;)
  • #3
    syroB89
    Level 9  
    Doskonale, odwaliłeś całą robotę za mnie... :)

    Spróbuję teraz to zrozumieć i dostosować do dużej bazy danych. Mam tylko jedną wątpliwość: wydaje mi się, że makro powinno dodawać sumę wartości ze skoroszytu "Statystyka" do pustej komórki a nie do już istniejącej i zapełnionej danymi bo przy odświeżaniu będą nam się sumować powierzchnie nowe z tymi co były do tej pory w arkuszach.

    No i jeszcze automatyczne wywołanie makra mi nie działa, ale trochę sam w tym pogrzebię bo na prawdę wszystko mi napisałeś. Jestem bardzo wdzięczny. :)

    Dodano po 27 [minuty]:

    Jakimś cudem nie skopiowałem wiersza

    ark.Range("B2:B4").ClearContents

    albo go dodałeś. :)

    Dodano po 2 [godziny] 3 [minuty]:

    Mam jeszcze ciekawe pytanie:

    czy Twoje makro może zostać użyte w Powerpoincie? Ten program też ma obsługę VBA jak widzę. Mam w nim tabelki do każdego budynku i ta suma powierzchni też by mi się przydała tam. Jak z tym jest? :)
  • #4
    adamas_nt
    Moderator of Programming
    syroB89 wrote:
    czy Twoje makro może zostać użyte w Powerpoincie? Ten program też ma obsługę VBA jak widzę. Mam w nim tabelki do każdego budynku i ta suma powierzchni też by mi się przydała tam. Jak z tym jest?
    Wszystko jest do zrobienia. Zależy jakich kontrolek używasz w slajdach. I najważniejsze: PowerPoint, o ile mi wiadomo, nie ma obsługi zdarzeń. Trzeba będzie coś wymyślić...

    Na początek zaptaszkuj w referencjach dostęp do obiektów Excela. Nie mam zainstalowanego PowerPointa (używam PPViewer), ale nazwa zapewne będzie taka sama jak w Excelu: "Microsoft Excel xx.x Object Library"

    Dalsze działanie to zadeklarowanie obiektu, otwarcie pliku, etc

    Przećwicz na początek takie coś (nie testowane w PP)
    Code: vbscript
    Log in, to see the code
    Włącz oczywiście obsługę makr w PP ;)

    Update: Hmm. Piszą, że można: Link
    Jednak AutoRun w PP2007^ to grubsza kombinacja Link
  • #5
    syroB89
    Level 9  
    Adamas na razie zostawiam temat Powerpointa bo muszę dopracować to co zacząłem. Za wcześnie zacząłem pytać. :)

    Mam pytania jeszcze do poprzedniego makra:
    1. Jak zrobić, żeby z pierwszego z rodzajów budynków (tj. np. "Biurowiec cz. A") pobierało mi dane z kolejnej kolumny? Próbowałem to dopisać, ale zasysa mi wszystkie dane dot. np. Biurowca a mi zależy tylko na jednorazowej informacji. Np. w kolejnej kolumnie po powierzchni mam właściciela, który jest identyczny dla wszystkich części budynku, ale może się zmienić w pewnym momencie w bazie i chciałbym, żeby makro też to sprawdzało.
    Próbuję sam coś wymyślić, może mi się uda. :)

    2. Załóżmy, że każdy z budynków - np. Biurowiec cz. A, Biurowiec cz. B, Biurowiec cz. C ma w drugiej kolumnie określone czy jest "planowany", czy "istniejący". Moje pytanie brzmi, czy da się zdefiniować, żeby "Powierzchnia dostępna" zbierała się za pomocą naszego makra tylko z budynków "istniejących"?
    Tego sobie za bardzo nie wyobrażam jak zrobić, może coś podpowiecie? Szczególnie liczę na mistrza Adamasa. ;)
  • Helpful post
    #6
    adamas_nt
    Moderator of Programming
    Dopisz kolejną instrukcję warunkową...
    Code: vbscript
    Log in, to see the code
    Jeśli tylko dostępna, to
    Code: vbscript
    Log in, to see the code
  • #7
    syroB89
    Level 9  
    Działa. :)

    To było proste, ale ja na razie nie mogę zrozumieć jak działa ta linijka zbierająca:

    Code: vbscript
    Log in, to see the code


    Przed następnymi pytaniami doczytam dokładnie jak ona działa. Tymczasem dziękuję Ci bardzo. :)
  • #8
    syroB89
    Level 9  
    Wróciłem wczoraj do tematu PowerPointa, ale jest on znacznie bardziej wymagający bo opiera się na obiektach, na razie nie odnotowałem sukcesu, wiec może ktoś z was będzie mógł mi pomóc.

    W załączniku jest prezentacja do której ma się pobierać po wywołaniu makra informacja o powierzchni (tak jak poprzednio, tylko zamiast do excella dane idą do komórek tabelki) oraz dodatkowo informacja o właścicielu (ma się pobierać tylko z jednego z wierszy dot. danego typu budynku - tj. tylko z jednej części biurowca lub centrum handlowego).

    Pliki w załączeniu. Bardzo dziękuję za wszelkie sugestie i pomoc. :)
  • #9
    syroB89
    Level 9  
    Warto odnotować, że identyfikacja slajdów powinna być po tytułowym polu tekstowym. Przynajmniej ja tak próbuję zrobić. :)