Rinominare progressivamente gli istogrammi



  • Rinominare progressivamente gli istogrammi
    di ilFonta (utente non iscritto) data: 18/02/2013 10:16:29

    Buongiorno comunità

    sono un novizio della programmazione in visual basic.

    Ho un foglio in cui nella prima colonna ho i dati delle classi e nella seconda i dati di input.
    Grazie al registratore di macro ho costruito questo script che produce due istogrammi e il relativo grafico.

    Vorrei che i grafici prendessero come titolo quello da me desiderato.
    Nel mio esempio sarebbe "mychart1" e "mychart2".

    So che il problema del mio codice sta nell'istruzione "ActiveChart.ChartTitle.Select".

    Sapete darmi qualche consiglio?

    Inoltre: non ho trovato molta documentazione relativa a ATPVBAEN.XLAM.
    A cosa si riferiscono quei "False, False, _ True, False" finali?
    Grazie

    Application.Run "ATPVBAEN.XLAM!Histogram", ActiveSheet.Range("$B$2:$B$9"), _
    ActiveSheet.Range("$C$2"), ActiveSheet.Range("$A$2:$A$100"), False, False, _
    True, False
     
    Sub Istogrammi()
    
    'building the 1 histogram
         Application.Run "ATPVBAEN.XLAM!Histogram", ActiveSheet.Range("$B$2:$B$9"), _
            ActiveSheet.Range("$C$2"), ActiveSheet.Range("$A$2:$A$100"), False, False, _
            True, False
        'modify the title of the first chart
        ActiveChart.ChartTitle.Select
        ActiveChart.Axes(xlValue).AxisTitle.Select
        ActiveSheet.ChartObjects("Grafico 1").Activate
        ActiveChart.Axes(xlCategory).AxisTitle.Select
        ActiveSheet.ChartObjects("Grafico 1").Activate
        ActiveChart.ChartTitle.Select
        ActiveChart.ChartTitle.Text = "G1"
        Selection.Format.TextFrame2.TextRange.Characters.Text = "G1"
        With Selection.Format.TextFrame2.TextRange.Characters(1, 2).ParagraphFormat
            .TextDirection = msoTextDirectionLeftToRight
            .Alignment = msoAlignCenter
        End With
        With Selection.Format.TextFrame2.TextRange.Characters(1, 2).Font
            .BaselineOffset = 0
            .Bold = msoTrue
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.RGB = RGB(0, 0, 0)
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 18
            .Italic = msoFalse
            .Kerning = 12
            .Name = "+mn-lt"
            .UnderlineStyle = msoNoUnderline
            .Strike = msoNoStrike
        End With
    
    
    'building the 2 histogram
         Application.Run "ATPVBAEN.XLAM!Histogram", ActiveSheet.Range("$B$11:$B$24") _
            , ActiveSheet.Range("$E$2"), ActiveSheet.Range("$A$2:$A$100"), False, False _
            , True, False
        'modify the title of the second chart
        ActiveChart.ChartTitle.Select
        ActiveChart.ChartTitle.Text = "G2"
        Selection.Format.TextFrame2.TextRange.Characters.Text = "G2"
        With Selection.Format.TextFrame2.TextRange.Characters(1, 2).ParagraphFormat
            .TextDirection = msoTextDirectionLeftToRight
            .Alignment = msoAlignCenter
        End With
        With Selection.Format.TextFrame2.TextRange.Characters(1, 2).Font
            .BaselineOffset = 0
            .Bold = msoTrue
            .NameComplexScript = "+mn-cs"
            .NameFarEast = "+mn-ea"
            .Fill.Visible = msoTrue
            .Fill.ForeColor.RGB = RGB(0, 0, 0)
            .Fill.Transparency = 0
            .Fill.Solid
            .Size = 18
            .Italic = msoFalse
            .Kerning = 12
            .Name = "+mn-lt"
            .UnderlineStyle = msoNoUnderline
            .Strike = msoNoStrike
        End With
        
    End Sub
    



  • di Vecchio Frac data: 18/02/2013 11:44:43

    La Guida dice che "L'oggetto ChartTitle esiste e ne è consentito l'accesso solo se la proprietà HasTitle ha valore True".
    Quindi prima di impostare il titolo devi abilitarlo:
    activechart.HasTitle = True
    activechart.ChartTitle.Text = "pippo"

    Se nel tuo esempio quel "G1" è un testo, va bene.
    Ma se è un riferimento al testo contenuto nella cella G1 devi scriverlo in modo diverso:
    Range("G1") -oppure-
    [G1] (tra parentesi quadre)

    Per quanto riguarda
    Application.Run "ATPVBAEN.XLAM!Histogram", ActiveSheet.Range("$B$2:$B$9"), _
    ActiveSheet.Range("$C$2"), ActiveSheet.Range("$A$2:$A$100"), False, False, _
    True, False

    devi sapere che gli underscore indicano semplicemente all'interprete di considerare tutt'una la riga che viene spezzata su più linee per ragioni tipografiche. Ciò premesso, non so a cosa si riferiscono i parametri True e False che indichi perchè non so cosa fa la macro Histrogram, anche se è probabile che riflettano le operazioni fatte a mano (range dati, assi delle categorie, presenza o meno di assi, di titoli, ecc).





  • GRazie
    di ilFonta (utente non iscritto) data: 18/02/2013 19:29:34

    Grazie mille, sei stato davveo gentilissimo. Adesso provo a metter in pratica i tuoi consigli, può darsi che sbaglierò, ma per ora ti ringrazio.

    Giacomo


  • Rinominare progressivamente gli istogrammi
    di ilFonta (utente non iscritto) data: 18/02/2013 23:19:28

    Ciao FRancesco

    Ho cercato di seguire il tuo consiglio.
    Ho anche dato una bella ripulita al codice.
    Purtroppo ancora non funziona.
    Mi si crea il primo grafico, ma il titolo resta ancora quello di default e non "grafico1" poi mi compare il messaggio di errore:
    "Errore di run-time 91
    variabile d'oggetto o variabile del blocco with non impostato" e il debugger evudenzia ActiveChart.HasTitle = True

    Ho provato a decifrare ma ancora non sono pronto.

    A titolo di informazione quei False, False, True , False sono relativi a:
    (in ordine)
    1) istogramma paretiano ordinato
    2) frequenza cumulativa
    3) grafico in uscita
    4) non ho ancora capito

    Grazie per l'aiuto

    Giacomo

     
    Sub Macro2()
    
    'building the 1 histogram
         Application.Run "ATPVBAEN.XLAM!Histogram", _
         ActiveSheet.Range("$B$2:$B$9"), _
         ActiveSheet.Range("$C$2"), _
         ActiveSheet.Range("$A$2:$A$100"), _
         False, False, True, False
        'modify the title of the first chart
        ActiveChart.HasTitle = True
        ActiveChart.ChartTitle.Text = "grafico1"
        
    'building the 2 histogram
         Application.Run "ATPVBAEN.XLAM!Histogram", _
         ActiveSheet.Range("$B$11:$B$24"), _
         ActiveSheet.Range("$E$2"), _
         ActiveSheet.Range("$A$2:$A$100"), _
         False, False, True, False
        'modify the title of the second chart
        ActiveChart.HasTitle = True
        ActiveChart.ChartTitle.Text = "grafico2"
        
    End Sub