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 , zastosowanie do wielu arkuszy.

27 Mar 2010 13:20 8009 5
  • Poziom 2  
    Witam , mam problem . Otóż tworze proste makro robiące w arkuszu numer 1 , 3 wykresy i jeden wiersz ktory jest iloczynem 2 komórek , no i wszystko ładnie wychodzi , tylko ze kiedy to samo makro chce zastosowac do arkusza numer 2 to niestety nie dziala , poniewaz robi te same czynności w arkuszu numer 1 ,

    pytanie brzmi , jak makro zrobione w arkuszu pierwszym , zastosowac do kilkudziesieciu nastepnych arkuszy w tym samym pliku ??

    z góy dziekuje za odpowiedzi, porady...
  • Moderator Programowanie
    1. Umieść makro w module standardowym (jeśli jest w kodzie arkusza).

    2. Odszukaj i podmień wszystkie odwołania do arkusza Np Worksheets("Arkusz1") na ActiveSheet.

    Można dla ułatwienia przypisać skrót klawiszowy i teraz wystarczy uruchomić makro w dowolnym, aktywnym arkuszu.
  • Poziom 2  
    dziekuje za informacje , a moze jakas porada dzieki ktorej moglbym zaznaczyc wszystkie arkusze , i nacisnac np skrot ctrl+shift+t zeby sie makro zrobilo do wszystkich arkuszy na raz , mam 100 plików , w kazdym 30 arkuszy , i wlasnie chcialbym to jeszcze usprawnic .
  • Moderator Programowanie
    Jeśli ma się coś wydarzyć we wszystkich arkuszach, to spróbuj w pętli.
    Code:
    For i = 1 To Sheets.Count
    
      MsgBox Sheets(i).Name
    Next
    Zmienna licznik podstawiana jast jako indeks arkusza.
  • Poziom 2  
    cienki jestem w programowaniu. Przedstawie sytuacje:
    -otwieram plik *.xls
    -w nim jest 30 arkuszy o nazwach od arkusz1 do arkusz30
    -aktywnym arkuszem jest arkusz1 ,
    -daje Narzędzia > makro> rejestruj nowe makro , daje ok i zaczyna mi "nagrywac" czynności
    -jako ze chodzi mi o ogólną zasade dzialania , czynnością jaką rejestruje makro jest "wstaw wykres" , zaznaczam komorki , i jest wykres ,
    -w tym momencie daje "zakończ rejestrowanie makra"
    -wchodze do visual basica i edytuje utworzone makro. Pojawia sie kod

    Code:
    Sub Makro1()
    
    '
    ' Makro1 Makro
    ' Makro zarejestrowane 2010-03-29, autor p0nk1
    '
    ' Klawisz skrótu: Ctrl+Shift+T
    '
        Charts.Add
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Sheets("Arkusz1").Range("G8:H1445"), _
            PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Arkusz1"
        With ActiveChart
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With
        activesheet.Shapes("Wykres 1").IncrementLeft 150.75
        activesheet.Shapes("Wykres 1").IncrementTop 12#
    End Sub


    -teraz pytanie , gdzie mialbym zmienic kod by , makro ktore utworzylem , zadzialalo na tych samych komórkach ale na arkuszu numer 2 o nazwie arkusz2

    -probowalem zmieniac Sheets("Arkusz1") na "activesheet" ale nic to nie dawalo , tak jak nadmienilem wyzej , jestem zielony w temacie , dlatego prosze o pomoc.

    jeszcze inaczej rzecz ujmujac , chcialbym po prostu , wejsc do arkusza2 kliknąć skrot klawiszowy makra , i zeby robil mi wykres z danych z arkusza2 , dalej wejsc do arkusza 3 , nacisnac skrot klawiszowy makra, zeby mi zrobil wykres z danych zawartych w arkuszu 3 , itd...


    aktualizacja!

    doszedlem do tego ze jak w kodzie makra skopiuje kilka razy kod
    Code:
    Charts.Add
    
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Sheets("Arkusz1").Range("G8:H1445"), _
            PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Arkusz1"
        With ActiveChart
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With


    i w miejscach Sheets("Arkusz1") oraz Name:="Arkusz1" zamiest "1" wpisze "2" to mi robi juz wykres dla danych z arkusza 1 i dla danych z arkusza 2 ,

    pytanie brzmi jak zrobić by automatycznie zmienial nazwe arkusz"i" na arkusz"i+1" az do sheets.count ????
  • Moderator Programowanie
    Odczyt nazwy i podstawienie. Zawsze jest 1 wykres w arkuszu, więc Shapes(1) w odwołaniu. Czyli
    Code:
    Sub Makro1()
    
    '
    ' Makro1 Makro
    ' Makro zarejestrowane 2010-03-29, autor p0nk1
    '
    ' Klawisz skrótu: Ctrl+Shift+T
    '
    Dim i As Integer, nazwaArk As String
    For i = 1 To Sheets.Count
        nazwaArk = Sheets(i).Name
        Charts.Add
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Sheets(nazwaArk).Range("G8:H1445"), _
            PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:=nazwaArk
        With ActiveChart
            .HasTitle = False
            .Axes(xlCategory, xlPrimary).HasTitle = False
            .Axes(xlValue, xlPrimary).HasTitle = False
        End With
        ActiveSheet.Shapes(1).IncrementLeft 150.75
        ActiveSheet.Shapes(1).IncrementTop 12#
    Next
    End Sub