logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

MAKRO-VBA EXCEL: Automatyzacja kopiowania danych i tworzenia wykresów

geGinator 24 Lis 2009 12:51 7528 3
REKLAMA
  • #1 7302215
    geGinator
    Poziom 11  
    Posty: 8
    Witam, od razu mowie ze kompletnie nie znam sie na Makro, niestety musze cos zrobic, mam 2 problemy:

    1) Skopiowac dane z kolum od E do AD od wiersza 18 do 113, wkleic do nowego 'Arkusza', otworzyc nowy plik dla nastepnego dnia i wykonac ta samom czynnosc wklejajac ponizej i tak w kolko (czyli 30 ewentualnie 31 razy to samo)

    2) Potrzebne mi sa 5 wykresow dla kazdego dnia miesiaca co daje mi 150 wykresow zrobilem to recznie ale napewno da sie cos zrobic zeby to uproscic, mam pomysl i chce wiedziec czy jest to mozliwe. zrobic 2 'listy wyboru' w pierwszej uzytkownik moze wybrac dzien, ktory go interesuje w drugiej zas jakie konkretne dane go interesuja ( 2 czasem 3 kolumny)

    Z gory dziekuje za szybka odpowiedz nie musi to byc gotowiec bede wdzieczny za mozliwosc nauki zeby na przyslosc nie meczyc Panstwa moimi problemami pozdrawiam

    PS. przepraszam za brak polskich znakow
  • REKLAMA
  • #2 7305664
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    geGinator napisał:
    od razu mowie ze kompletnie nie znam sie na Makro
    To może trochę teorii na początek?
    Np Link Funkcje>Funkcje wejścia-wyjścia i poczytaj trochę na temat funkcji: Dir. Potrzebna będzie do realizacji pkt.1

    Następnie: Instrukcje>Pętle trochę wiedzy na temat pętli przyda się w obu przypadkach.
    Jeśli zrozumiesz co dzieje się w takim małym przykładzie
    Sub przyklad()
    sciezka = Application.DefaultFilePath & "/"
    plik = Dir(sciezka & "*.xls")
    
    Do While plik <> ""
      MsgBox plik
      plik = Dir
    Loop
    
    End Sub
    to będziesz w połowie drogi.

    Wykorzystaj też rejestratora makr. Nagraj otwieranie pliku, wstawianie wykresu i przeanalizuj skąd się co bierze. Będziesz wiedział o co pytać lub czego szukać Np w Google. Nazwy arkuszy, wykresów, zakresów etc podstaw pod zmienne i nimi operuj. Wtedy nie będzie problemu z wyborem z listy. Tyle na początek...
  • REKLAMA
  • #3 7307136
    geGinator
    Poziom 11  
    Posty: 8
    Dziekuje za odpowiedz z kursu napewno skorzystam i wezme sie za prace...
    poszedlem troche na latwizne i udalo mi sie przerobic czyjes makro i smiga wysmienicie moze komus tez sie przyda pozdrawiam
    Sub OperacjeHurtowe()
    Dim wbkSkoroszyt As Workbook
    Dim i As Long, szukWiersz As Long, wiersz As Long
    Dim sciezka As String
    ' okreslam sciezke szukania jako podkatalg Dane katalogu gdzie znajduje sie skoroszyt Zbiorczy
    sciezka = ThisWorkbook.Path & "\Dane"
    wiersz = 1 ' zmienna okreslajaca biezacy wiersz w arkuszu gdzie zbieram dane
    
      With Application.FileSearch   ' zaczynam prace z obiektem FileSearch
        .NewSearch                  ' nowe szukanie
        .LookIn = sciezka           ' sciezka poszukiwan
        .SearchSubFolders = False   ' szukanie w podfolderach - nie
        .Filename = "*.xls"         ' nazwa plików
        .FileType = msoFileTypeExcelWorkbooks ' typ pliku - Excel
        
        ' jezeli liczba znalezionych (i posortowanych przy okazji) jest wieksza od zero
        If .Execute(msoSortByFileName) > 0 Then
            ' robie petle od 1 do liczby znalezionych plików
            For i = 1 To .FoundFiles.Count
                ' otwieram 1 odnaleziony skoroszyt (a w nastepnych obiegach petli  2,3 az do ilosci znalezionych)
                Set wbkSkoroszyt = Workbooks.Open(.FoundFiles(i))
                'aktywuje ten skoroszyt
                wbkSkoroszyt.Activate
                With wbkSkoroszyt.Worksheets(2) ' w pierwszym arkuszu tego skoroszytu
                'szukam ostatniego niepustego wiersza w kolumnach A:G (do poprawienia wedlug potrzeb)
                'mozna tez zamiast Range("E18:AD18") wpisac Cells wtedy bedzie szukal ostatniej niepustej we wszystkich kolumnach
                szukWiersz = .Range("E18:AD113").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
                'kopiuje zakres od drugiego wiersza do ostatniego zapisanego do kolumny G (do poprawienia wedlug potrzeb)
                .Range("E18:AD" & szukWiersz).Copy Destination:=Workbooks("Zbiorczy.xls").Worksheets(1).Range("A" & wiersz)
                'zwiekszam wiersz o ilosc wkopiowanych wierszy - 1 naglówek
                wiersz = wiersz + szukWiersz - 17
                End With ' tyle operacji na tym arkuszu
                wbkSkoroszyt.Close False 'zamykam odnaleziony skoroszyt bez zapisywania zmian
            Next i ' idz do nastepnego skoroszytu
        Else ' jezeli nie znalazlem plików w podanej lokalizacji
            MsgBox "Nie znaleziono zadnych plików" ' daje komunikat
        End If ' koniec mozliwosci odnoscie znajdowania
      End With 'koncze prace w obiektem FileSearch
    
    End Sub
  • #4 16956166
    ag851104
    Poziom 7  
    Posty: 5
    Ocena: 1
    Cześć :) .jestem poczatkujacym a raczej raczkujacym uzytkownikiem VBA.mam ogromną prosbę o pomoc.
    Chciałabym stworzyć makro, które po wybraniu ODDZIAŁU pozycji w filtrze utworzy nowy skoroszyt z 3 zakladkami jak te w pliku i beda zawierac dane tylko tego oddzialu i zapisze go z nazwa wybranego oddziału.
    Stworzone tabele w 3 zakladkach sa ukazane na przykladowych wartosciach. Polega to na tym, iż sa tam wyniki finansowe kazdego oddzialu i kierownicy innych oddzialow nie moga zobaczyc nie swoich wynikow.
    Załączniki:
    • rozliczenie miesiac do vba.xlsx (1.78 MB) Musisz być zalogowany, aby pobrać ten załącznik.
REKLAMA