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.
Lo confermo.
> Beh, a me non funziona. O meglio, non corrisponde.
E' ovvio che bisogna conoscere i concetti della programmazione a
oggetti.
Cioè, non è che si possa fare un .Select su un oggetto di excel da vb6.
Cioè, si può fare, ma non serve a niente, va modificato con un Set per
prendere il riferimento al range o a ciò che ci serve.
> 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
Sintassi strana.
Sembra quasi quella di Office 2007 (che non è più compatibile con
MSChart, come anche con la vecchia libreria MSOWC che andrebbe
installata a parte).
Puoi dirmi la versione esatta di excel con cui hai ottenuto questa
sintassi?
> 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
Ecco, qua mi ci ritrovo già di più.
Ricordo un codice del genere inserito in un mio vecchio progetto, e
sicuramente generato col registratore di macro.
> 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.
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.
> Lo confermo.
Il testo sopracitato è infatti il tuo :-)
> > Beh, a me non funziona. O meglio, non corrisponde.
> E' ovvio che bisogna conoscere i concetti della programmazione a
> oggetti.
> Cioè, non è che si possa fare un .Select su un oggetto di excel da vb6.
> Cioè, si può fare, ma non serve a niente, va modificato con un Set per
> prendere il riferimento al range o a ciò che ci serve.
Questo lo capisco bene, ovviamente non ho copiato/incollato il codice, ma ho
cercato nell'object browser in VB qualche proprietà/metodo che assomigliasse
a quello che mi ha sputato Excel: nisba.
[..cut..]
> > ActiveChart.PlotArea.Select
> > ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue,
> > LegendKey:=False
> Sintassi strana.
>
> Sembra quasi quella di Office 2007 (che non è più compatibile con
> MSChart, come anche con la vecchia libreria MSOWC che andrebbe
> installata a parte).
>
> Puoi dirmi la versione esatta di excel con cui hai ottenuto questa
> sintassi?
Excel 2000 (9.0.6926 SP-3)
> > 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
>
> Ecco, qua mi ci ritrovo già di più.
> Ricordo un codice del genere inserito in un mio vecchio progetto, e
> sicuramente generato col registratore di macro.
E' sempre preso dal tuo post, più una minima modifica.
> > 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.
>
> In effetti non capisco da dove ti venga fuori quel codice là.
Eppure è così..
Però se hai Office 2000, che il chm con tutto l'object model di mschart
e gli esempi di codice. In qualche post avevo anche riportato il
percorso esatto, comunque era in \programfiles\office ecc..., in una
cartella in cui ci sono tanti help, ce n'è uno che si capisce che è
legato a excel e vba...
> [..cut..]
>>> ActiveChart.PlotArea.Select
>>> ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue,
>>> LegendKey:=False
>
>> Sintassi strana.
>>
>> Sembra quasi quella di Office 2007 (che non è più compatibile con
>> MSChart, come anche con la vecchia libreria MSOWC che andrebbe
>> installata a parte).
>>
>> Puoi dirmi la versione esatta di excel con cui hai ottenuto questa
>> sintassi?
>
> Excel 2000 (9.0.6926 SP-3)
Purtroppo non ho più pc con quella versione, non ho modo di capire cosa
sia.
>
>
>
>>> 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
>>
>> Ecco, qua mi ci ritrovo già di più.
>> Ricordo un codice del genere inserito in un mio vecchio progetto, e
>> sicuramente generato col registratore di macro.
>
> E' sempre preso dal tuo post, più una minima modifica.
Guarda, ai tempi l'help di mschart l'avevo usato, ma diciamo che
l'avevo usato solo perchè l'intellisense non arriva in fondo all'object
model del mschart, per cui da un certo livello in poi si va di help.
Però il grosso me l'aveva fatto il registratore di macro.
Ohi, poi magari quella specifica funzionalità l'avevo ricavata
dall'help, dopo anni e anni non posso ricordarlo.
>>> 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.
>>
>> In effetti non capisco da dove ti venga fuori quel codice là.
>
> Eppure è così..
Mah...
Alberto
--
La forza di volontà è guardare negli occhi una ragazza in topless.
> Però se hai Office 2000, che il chm con tutto l'object model di mschart
> e gli esempi di codice. In qualche post avevo anche riportato il
> percorso esatto, comunque era in \programfiles\office ecc..., in una
> cartella in cui ci sono tanti help, ce n'è uno che si capisce che è
> legato a excel e vba...
Probabilmente ti riferisci a questo: Msowcvba.chm
Però la differenza tra cercare/provare/capire questo file e riuscire ad
avere un risultato utilizzabile già dalla macro è sostanziale..
[..cut..]
> Guarda, ai tempi l'help di mschart l'avevo usato, ma diciamo che
> l'avevo usato solo perchè l'intellisense non arriva in fondo all'object
> model del mschart, per cui da un certo livello in poi si va di help.
L'help di MSChart l'ho guardato, ma è praticamente inutile.
> Però il grosso me l'aveva fatto il registratore di macro.
Infatti, a me servirebbe quello.
> > Eppure è così..
>
> Mah...
Credimi.. grazie comunque per l'aiuto.
No, c'era sicuramente un riferimento a Excel già nel nome del file, lo
ricordo chiaramente. Un ...XL... o qualcosa del genere.
> Però la differenza tra cercare/provare/capire questo file e riuscire ad
> avere un risultato utilizzabile già dalla macro è sostanziale..
Diciamo che per chi parte da zero, la macro fornisce il 90% del lavoro.
Poi lo si sistema per adattarlo alla programmazione a oggetti, ma
spesso è poca roba.
Forse la specifica funzionalità che cerchi è 'particolare', purtroppo
non ho più modo di vedere.
> L'help di MSChart l'ho guardato, ma è praticamente inutile.
Beh, già avere tutto l'object model e qualche esempio, è una bella
cosa.
>> Però il grosso me l'aveva fatto il registratore di macro.
>
> 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!
Infatti, è così. Il fatto è che vorrei fare varie cose, che con Excel riesco
a fare tranquillamente, ma mi vengono i sudori freddi...
Forse c'è qualcos'altro, ma cosa ?
Qualcuno ne sa di più ?
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....
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!
> 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!
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.
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
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!
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.
Ovviamente referenziavo MSChart di vb6.
Però, all'epoca, Microsoft usava un controllo 'gemello' di mschart come
graficizzatore di Excel. Quindi, ciò che il registratore di macro di
excel creava come codice per il MSChart di Excel, al 90% andava bene
per MSChart di vb6.
Ricordo ciò che ho già detto, ossia che l'intellisense di vb6 per
MSChart NON espone tutto, molta roba esiste ma non è visibile, bisogna
provare.
Poi, come detto, io usavo un help di vba per excel, che ho sicuramente
citato in qualche post dell'epoca, ma che oggi non trovo più nel mio pc
(dove nel frattempo ho installato Office2007).
L'unione del registratore di macro e di QUEL help (che presentava tutto
l'object model di MSChart per excel, e questo object model funzionava
anche in vb6), mi ha consentito di 'prendere in mano' MSChart e creare
quelle strutture che anche Toska ha postato ad inizio thread.
> 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.
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...
Ok, ma ancora più vecchio di Excel 97 ? Parliamo di 12 anni fa'..
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.
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.
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!
:)
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"...
>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!
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.
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!