Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[vba] [excel] Odwołanie do wykresu dla makra

Żurav 27 Sty 2012 16:39 4028 3
  • #1 27 Sty 2012 16:39
    Żurav
    Poziom 2  

    Witam,

    Mam pewien problem:

    otóż napisałem (nagrałem) makro, które tworzy wykres dla pewnego zakresu danych. Następnie muszę dokonać sporych modyfikacji wykresu, odwrotna skala, podział jednostek, nowy tytuł itd. Następnie wstawiam ponownie kolejny arkusz i tworzę dla niego znowu wykres, i tak w kółko.

    Chciałbym aby te działania wykonywało makro, jednak odwołuje się ono do konkretnego wykresu:

    Proszę o pomoc w odwołaniu względnym, tak aby zastąpić konkretny wykres (w tym przypadku 'chart 217') tym który będzie wstawiony...

    Poniżej kod:

    Sub Macro4()
    '
    ' Macro4 Macro
    ' Macro recorded 2012-01-27 by Żuraw
    '

    '
    Range("I11:M16").Select
    Charts.Add
    ActiveChart.ChartType = xlXYScatterSmooth
    ActiveChart.SetSourceData Source:=Sheets("badanie").Range("I11:M16"), PlotBy _
    :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="badanie"
    With ActiveChart
    .HasTitle = False
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "as"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "sd"
    End With
    With ActiveChart.Axes(xlCategory)
    .HasMajorGridlines = True
    .HasMinorGridlines = False
    End With
    With ActiveChart.Axes(xlValue)
    .HasMajorGridlines = True
    .HasMinorGridlines = False
    End With
    ActiveChart.HasLegend = False
    ActiveSheet.Shapes("Chart 217").IncrementLeft -84#
    ActiveSheet.Shapes("Chart 217").IncrementTop -4.5
    ActiveSheet.Shapes("Chart 217").ScaleWidth 1.07, msoFalse, msoScaleFromTopLeft
    ActiveSheet.Shapes("Chart 217").ScaleHeight 1.38, msoFalse, _
    msoScaleFromTopLeft
    ActiveChart.Axes(xlCategory).MajorGridlines.Select
    ActiveChart.Axes(xlValue).Select
    With ActiveChart.Axes(xlValue)
    .MinimumScale = 0
    .MaximumScaleIsAuto = True
    .MinorUnit = 200
    .MajorUnitIsAuto = True
    .Crosses = xlAutomatic
    .ReversePlotOrder = True
    .ScaleType = xlLinear
    .DisplayUnit = xlNone
    End With
    End Sub

    0 3
  • #2 27 Sty 2012 22:42
    kalingrad
    Poziom 12  

    Jeśli masz tylko jeden wykres na arkuszu możesz zamiast tego

    Kod: sql
    Zaloguj się, aby zobaczyć kod

    użyć tego
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Oprócz tego według mnie będą też problematyczne te linijki

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    gdyż odwołujesz się tu do nazwy arkusza, jeśli arkusz będzie nazywał się inaczej niż "badanie" lepiej użyć tego jako początek makra
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Linia
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    kompletnie nic nie wnosi do tego makra.

    0
  • #3 27 Sty 2012 23:06
    Żurav
    Poziom 2  

    Dzięki za pomoc.

    Niestety mam kilka wykresów w arkuszu.

    Próbuję dokonać edycji całego wykresu (czyli wszystkich zmian, zakresu, nazw osi itp.) za jednym razem łącznie w ciągu makra.

    ostatnia uwaga co do zakresu - to zanim generuję wykres muszę zmienić zakres serii wykresu - bo czyta on inne, te które zostały wstawione wcześniej.

    Zaimplementuje Twoje uwagi - jak poprawie - poproszę jeszcze o ewentualną korektę. Jeszcze raz dzięki,

    0
  • Pomocny post
    #4 27 Sty 2012 23:33
    kalingrad
    Poziom 12  

    W takim razie może coś takiego:

    Pomysł bazuje na tym iż index ostatnio dodanego wykresu jest najwyższy

    Na początku deklarujemy :

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    a zamiast tego
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Proponuję to
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0