Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] MSChart e registratore macro Excel

Ciao,
sto bestemmiando con il MSChart e le sue 2000 proprietą, sotto-oggetti
etc...
Spesso, googlando, mi imbatto in frasi come questa: "essendo MSChart lo
strumento di grafica di excel, col
registratore di macro possiamo crearci il codice a piacimento".
Beh, a me non funziona. O meglio, non corrisponde.
Ad esempio, avevo bisogno di visualizzare, in un istogramma a barre, il
valore di ogni barra. Ho creato un grafico Excel, ho avviato la
registrazione della Macro ed ho ativato la visualizzazione dei valori.
Semplice e veloce. Risultato ?
    ActiveChart.PlotArea.Select
    ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue,
LegendKey:=False
Ah, per la cronaca, la soluzione in VB6 č questa:
   With MSChart1.Plot.SeriesCollection.Item(1)
      .Pen.Width = 10
      .DataPoints.Item(1).DataPointLabel.LocationType =
VtChLabelLocationTypeAbovePoint
   End With
Come vedete non ci azzecca niente...
Mi spiegate come usare sta roba ? ApplyDataLabels, l'unico metodo che vedo
nel testo della macro di Excel, non esiste nell'object browser di MSChart1.
Quindi deduco che o non ci ho capito un tubo, o sono ccecato.
Grazie.

 Quindi deduco che o non ci ho capito un tubo, o sono ccecato.
In effetti non capisco da dove ti venga fuori quel codice là.
Alberto
-- 
Friedrich Nietzsche: Un po' di salute ogni tanto è il miglior rimedio 
per l'ammalato.

 In effetti non capisco da dove ti venga fuori quel codice là.
Eppure è così..

 Eppure è così..
Mah...
Alberto
-- 
La forza di volontà è guardare negli occhi una ragazza in topless.

 Mah...
Credimi.. grazie comunque per l'aiuto.

 Infatti, a me servirebbe quello.
Vecchie versioni di excel avevano più di una modalità di registrazione 
di macro. Addirittura si poteva registrare in un metalinguaggio di 
excel...
Nel tuo caso sembra vba a tutti gli effetti, seppur 'strano'. A dire il 
vero, ho provato a registrare con Office 2007 e mi è venuto fuori una 
cosa molto simile a quella da te postata. Ma siccome Office 2007 non 
usa MSChart, la somiglianza mi sorprende, mi aspettavo una cosa molto 
diversa.
Alberto
-- 
L'economia sa tutto di te e tu non sai niente dell'economia. La tua 
banca sa tutto di te, di quanti soldi hai, e quando li spendi; ma tu 
non sai niente di cosa fa la banca dei tuoi soldi e dove li mette, e se 
ce li ha!

 non ho più modo di vedere.
Infatti, è così. Il fatto è che vorrei fare varie cose, che con Excel riesco
a fare tranquillamente, ma mi vengono i sudori freddi...

Ho recuperato dalla scantinato un vecchio PC con Excel 97, ma il risultato è 
sempre lo stesso che ottengo con Excel 2000.
Forse c'è qualcos'altro, ma cosa ?
Qualcuno ne sa di più ? 

 Grazie.
Ho letto il tuo post.....MAH!
Abbi pazienza benedetto ragazzo.... 2 secondi netti:
Invocazione di San Google da Pinerolo...richiesta "ApplyDataLabels"
Risposta del santo:
http://msdn.microsoft.com/en-us/library/aa221818(office.11).aspx
Conclusione: Excel 2003 VBA reference
Iper-conclusione: Hai installato office 2002/2003...ED A QUEL
COMPONENTE (versione 2002 2003 in poi) ti devi riferire....

 COMPONENTE (versione 2002 2003 in poi) ti devi riferire....
Tanto per dire....in questo pc non ho nessun sistema di sviluppo ma
office 2007
Lanciato Excel
attivato e aperta la finestra di VBA
Ho scritto
dim T as new Chart
T. ( t punto...intellisense che si attiva!)  ecco li tutte le
proprietà ed i metodi!
per me ti agganci alla versione vecchia del componente! Non ho un
windows 97 e un 2000 per vedere se espone proprietà diverse...ma
probabilmente si!

 probabilmente si!
Perdonami, ma il punto non è l'intellisense, che funziona egregiamente. Il 
punto è che
gestire i grafici per dare loro un minimo di personalizzazione è davvero un 
casino, e non lo dico io, ma un sacco di post su NG ed anche articoli su 
vari siti. I sotto-oggetti, i metodi e le proprietà del controllo MSChert 
sono davvero tantissimi e solo ieri ho perso un'ora di tempo per cercare di 
fare una cosa apparentemente banale senza riuscirci.
Dato che su questo NG ed anche altrove trovo scritto che per avere del 
codice codice pronto è sufficiente registrare una macro di Excel, io ci ho 
provato.
Probabilmente sbaglio io, e forse ho anche un tantino le idee confuse, ma ho 
provato su 3 diversi PC con Excel 97, 2000 e 2003.
Il mio PC ha installato Excel 2000 e VB6 SP5. Nel progetto di prova clicco 
sul menù Progetto, poi Componenti e seleziono "Microsoft Chart Control 6.0 
(SP4)(OLEDB)", che fa riferimento al file MSCHRT20.OCX della cartella 
System32. Questo file ha data 21/05/2000 e versione 6.0.88.4.
Nello specifico in questo momento sto cercando di capire come su un 
istogramma con 2 serie di dati sia possibile far sormontare tra di loro ogni 
coppia di barre.
In Excel è semplicissimo: Click di destro su una barra dell'istogramma, 
"Formato Serie Dati", click sul tab "Opzioni" e li puoi regolare il valore 
"Sovrapponi" ed anche "Distanza tra le barre".
Il codice della macro risultante è sempre lo stesso per tutte le versioni di 
Excel che ho provato:
    ActiveChart.SeriesCollection(2).Select
    With ActiveChart.ChartGroups(1)
        .Overlap = 40
        .GapWidth = 120
        .HasSeriesLines = False
    End With
Osservando il codice è evidente che mi serve la proprietà Overlap. Peccato 
che nel controllo non esista: la cerco con il visualizzatore oggetti di VB 
puntando su MSCHrat20lib e digitando Overlap nella casellina di ricerca: 
nulla. Stessa cosa per GapWidth.
Spero di essermi spiegato meglio.
Ciao e grazie. 

 nulla. Stessa cosa per GapWidth.
Hai provato a fare la stessa prova con il visualizzatore oggetti di VB da 
Excel?
La proprietà se vai a controllare, magicamente salta fuori!
Quindi?
I controlli sono diversi, e quindi le proprietà variano.
Probabilmente certe cose si rassomigliano,
ed a queste devi far riferimento...
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it

 wrote:
zac
La cosa peggiore è smadonnare e sputtanarsi sui forum e ng vari sulle
magagne del nostro 16 cilindri  e sulla difficoltà di carburazione e
su quanto sia stronza l'Audi a fare un motore a benzina così
complicato....salvo poi scoprire che è un diesel a iniezione!
tiè
Office 2007
CHART
membro di
Library Excel
    C:\Programmi\Microsoft Office\Office12\EXCEL.EXE
    Microsoft Excel 12.0 Object Library
...e con questo!...le chiacchere sono finite!
Saluti!
p.s.
vb6 è questo! L'ocx quello!....o ne compri uno di terze parti...o ti
disegni i grafici a colpi di linee!...o referenzi la libreria di
excel...ma poi devi installare office per rimanere nella legalità
della licenza!

della licenza!
Io non so se quando Alberto in passato ha scritto qui sul ng abbia
referenziato Excel oppure il controllo di VB, fatto sta che se guardi questo
post:
http://www.nntp.it/comp-lang-visual-basic/584922-giocando-con-lmschart.html
qualcosa continua a non tornare, visto che il codice postato è quello
"compatibile" con l'OCX di VB e nel post si dice che è stato ottenuto con il
registratore di macro con Excel.
Alberto stesso più sopra ha detto che il codice della macro che ho postato
gli pareva strano, segno che lui riusciva, almeno in passato, ad utilizzare
Excel per registrare delle macro ed a riutiizzarle con il controllo di VB.
Inoltre tutti gli esempi che ho trovato on-line relativi ai grafici fatti
con VB sono compatibili con l'OCX.

 Excel per registrare delle macro ed a riutiizzarle con il controllo di VB.
Assolutamente vero. Io ho imparato l'object model di MSChart partendo 
da Excel, dal registratore di macro, e annaffiando il tutto con quel 
file di help (che se googlate nei miei post sull'argomento, sicuramente 
ho citato).
Alberto
-- 
Chi semina raccoglie,
ma chi raccoglie si china.
E a quel punto è un attimo...

 per MSChart di vb6.
Ok, ma ancora più vecchio di Excel 97 ? Parliamo di 12 anni fa'..

Dopo dura riflessione, ToSka ha scritto :

No, usavo Office2000 o OfficeXP. E il file di help era in uno di quelle 
due installazioni, o forse in entrambe.
Ma l'hai trovato? Perchè se no stiamo parlando di aria fritta...
Alberto
-- 
Alessandro Bergonzoni: Il tempo vola e noi no. Strano sarebbe se noi 
volassimo e il tempo no, il cielo sarebbe pieno di uomini con 
l'orologio fermo.

 Ma l'hai trovato? Perchè se no stiamo parlando di aria fritta...
No, dei .chm con XL nel nome e riferimenti al chart ne ho trovati ma
descrivono metodi e proprietà del grafico per Excel. Non hanno, in altre
parole le cose che sto cercando.

 wrote:
sigh!
ma perchè non mi stai ad ascoltare?
vb6 ti installa questa roba
http://support.microsoft.com/kb/194784
da dentro vb6 VEDI QUEL mschart!
per usare QUELLO di office
ad esempio
in 2003
Microsoft Office Chart 11.0
contenuto in
OWC11.EXE
che puoi trovare anche qui:
http://www.microsoft.com/downloads/details.aspx?FamilyId=7287252C-402E-4F72-97A5-E0FD290D4B76&displaylang=en
per dire: questo è quello di office 2000
http://msdn.microsoft.com/en-us/library/aa164003(office.10).aspx
Quindi lo ripeto
NON PUOI FARE DI TUTTA UN ERBA UN FASCIO!
Scegli il componente che vuoi....e cerca la documentazione relativa!
Però...
mi pare ovvio che se CHIEDI a Excel VBA di farti 2 righe di codice in
automatico...te le farà per il suo componente standard usato per
disegnare grafici.
Esattamente come se gli chiedi di inserire un calendario ad access!
Anni fà avevo scelto in un progetto di inserire il calendario di
office in quanto più "carino"...logico che poi lo dovevo inserire come
componente a parte!
E il  calendario di office era diverso da quello di vb6!
E non si poteva inserire in un progetto senza avere installato anche
office su quel pc!
Quindi ripeto...
di che stiamo parlando?
Del "coso per fare grafici" di VB6...o del "coso per fare grafici" di
una versione di office?
L'uno per l'altro è come mischiare pere e bulloni!
Tanto per sapere....a questo punto!
:)

 L'uno per l'altro è come mischiare pere e bulloni!
Non proprio.
Sono due componenti diversi, ma, vuoi perchè sono in realtà lo stesso 
motore incapsulato in due ocx diversi, vuoi per compatiblità. MS ha 
usato due object model praticamente identici.
Quindi, a parte alcune differenze per le quali occorre un attimo andare 
a sentimento, e a parte l'intellisense di vb6 che non espone tutto ma 
solo un ristrettissimo subset (ma inchiodando a mano le proprietà e i 
metodi ricavati da excel in realtà funzionano spessissimo), i due 
oggetti sono compatibili e il motore di registratore di macro di excel 
diventa uno strumento utilissimo.
Quantomeno per imbastire la struttura del codice, poi le lavorate di 
fino si fanno a parte.
Comunque ho cercato i miei vecchi post, l'help è effettivamente 
MSOWCVBA.CHM.
Però ho trovato anche i post di gente che diceva "ho provato col 
registratore e funziona"...


L'uno per l'altro è come mischiare pere e bulloni!
Stiamo parlando (sin dal primo post) del fatto che ci sono svariati post in
cui si dice che è possibile sfruttare il codice delle macro di Excel per
customizzare il controllo MSCHart di VB6.
Ora, io non ci sono riuscito, ma c'è gente che lo ha fatto. Il problema è
che non sono ancora riuscito a scoprire come. Io non so se hai mai provato a
"plasmare" anche solo l'aspetto del grafico di VB6, ma ti assicuro che per
me è un casino... sarò limitato.


spiace dirlo....ma vb6 per me sta finendo nel dimenticatoio...lo uso
solo per manutenzione ...
VB.net è la mia priorità in questo momento!
I grafici quando ho dovuto usarli ...me li son disegnati a colpi di
punti e linee.

 punti e linee.
e comunque.....
vuoi mettere???
http://community.visual-basic.it/alessandro/archive/2008/11/08/24133.aspx
per me varrebbe la pena fare il salto!...ovvio...se puoi/vuoi!