Insere un grafico in una UserForm

Anonimo
2016-11-28T19:35:03+00:00

Buonasera a tutti,

navigando in internet ho trovato due esempi relativi all'inserimento di un grafico nella UserForm.

il primo è di:

'Pasting from the Clipboard to a Userform Image control

'By Stephen Bullen,  ******@oaltd.co.uk

l'altro è di:

'Developed by John Walkenbach, JWALK AND ASSOCIATES

'Copyright 1999. All rights reserved.

'May be used and distributed freely, but may not be sold.

'http://www.j-walk.com/ss/

come già ben sapete si tratta di una immagine che viene incollata sulla UserForm.(se non ho capito male)

Sapete dirmi cortesemente, se esiste un controllo ActiveX da inserire nei controlli aggiuntivi e dove poter scaricare tale file?

Saluti Danilo.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-11-29T22:14:29+00:00

Ciao Danilo,

tenterò di spiegarmi meglio. Prima di iniziare vorrei ringraziarti per la risposta. Lo scopo è inserire uno di quei grafici(istogrammi) presenti in Excel ed inserirlo in una UserForm. Navigando in Internet (vari siti), spiegano che per farlo c'è bisogno di un file tipo mschrt20.ocx da inserire nelle cartelle System32 e SysWOW64 e successivamente immettere in esegui le righe di comando:

regsvr32 c:\windows\system32\mschrt20.ocx

regsvr32 c:\windows\SySWOW64\mschrt20.ocx e cliccare su enter.

Oltre al noto messaggio di errore, non trovo comunque il controllo del grafico nei controlli aggiuntivi e comunque non ho idea di come risolvere l'errore.

Leggendo qua e là spiegano che la soluzione al problema sta nell'inserire una immagine del grafico posto sul foglio di lavoro.

Se possibile vorrei farti qualche domanda.

E' effettivamente possibile usare un controllo per grafico? Esiste un pacchetto completo di controlli ActiveX da inserire nei controlli aggiuntivi? 

Il controllo ActiveX Image c'è, è quella la strada che devo percorre per raggiungere lo scopo? Ed usare i file di esempio prima citati?

Non ti servirebbe il mschrt20.ocx in quanto la funzionalità per creare grafici si trova già in Excel. Potrebbe però essere utile se volessi aggiungere questa funzionalità a VB e non utilizzassi Excel.

Per dimostrare un modo di visualizzare i grafici in una Userform, ho adattato un file di John Walkenbach

      http://spreadsheetpage.com/downloads/xl/formcharts.xls

Tra l'altro, ho aggiunto un istogramma (Grafico4).

Come vedrai, la Userform comprende un controllo Image, due controlli CommandButton per scegliere il prossimo/precedente grafico, ed un controllo CommandButton per chiudere la Userform:

                  

Per visualizzare un grafico nel controllo Image, se crea un fIle del tipo GIF e si passa il GIF alla proprietà Picture del controllo mediante la funzione LoadPicture:

'=========>>

Private Sub UpdateChart()

Dim CurrentChart As Chart

Dim FName As String

    Set CurrentChart = Sheets("Grafici").ChartObjects(ChartNum).Chart

    CurrentChart.Parent.Width = 300

    CurrentChart.Parent.Height = 150

'\ Salva grafico come GIF

    FName = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"

    CurrentChart.Export FileName:=FName, FilterName:="GIF"

'\ Mostra il grafico

    Image1.Picture = LoadPicture(FName)

End Sub

'<<=========

il codice completo nel modulo Userform è:

'--------->>

Option Explicit

Dim ChartNum As Long

'--------->>

Private Sub UserForm_Initialize()

    ChartNum = 1

    UpdateChart

End Sub

'--------->>

Private Sub cbInDietro_Click()

    If ChartNum = 1 Then ChartNum = 3 Else ChartNum = ChartNum - 1

    UpdateChart

End Sub

'--------->>

Private Sub cbAvanti_Click()

    If ChartNum = 4 Then ChartNum = 1 Else ChartNum = ChartNum + 1

    UpdateChart

End Sub

'--------->>

Private Sub cbChiudi_Click()

    Unload Me

End Sub

'--------->>

Private Sub UpdateChart()

Dim CurrentChart As Chart

Dim FName As String

    Set CurrentChart = Sheets("Grafici").ChartObjects(ChartNum).Chart

    CurrentChart.Parent.Width = 300

    CurrentChart.Parent.Height = 150

'\ Salva grafico come GIF

    FName = ThisWorkbook.Path & Application.PathSeparator & "temp.gif"

    CurrentChart.Export FileName:=FName, FilterName:="GIF"

'\ Mostra il grafico

    Image1.Picture = LoadPicture(FName)

End Sub

'<<=========

Potresti scaricare il mio file di prova Danilo20161129.xlsm a:

https://www.dropbox.com/s/2sm5e7c0efnx8sv/Daniloi20161129.xlsm?dl=0

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-12-02T09:08:43+00:00

    Ciao Danilo,

    Ti ringrazio per il cortese riscontro.

    Alla prossima.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-12-02T08:49:17+00:00

    Ciao Norman,

    Scusa se rispondo con molto ritardo, troppi impegni ultimamente, come sempre sei molto preciso e meticoloso.

    Farò come mi hai consigliato.

    Ancora grazie mille, buon lavoro e buone feste.

    Saluti Danilo.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-11-29T20:10:12+00:00

    Ciao Norman,

    tenterò di spiegarmi meglio. Prima di iniziare vorrei ringraziarti per la risposta. Lo scopo è inserire uno di quei grafici(istogrammi) presenti in Excel ed inserirlo in una UserForm. Navigando in Internet (vari siti), spiegano che per farlo c'è bisogno di un file tipo mschrt20.ocx da inserire nelle cartelle System32 e SysWOW64 e successivamente immettere in esegui le righe di comando:

    regsvr32 c:\windows\system32\mschrt20.ocx

    regsvr32 c:\windows\SySWOW64\mschrt20.ocx e cliccare su enter.

    Oltre al noto messaggio di errore, non trovo comunque il controllo del grafico nei controlli aggiuntivi e comunque non ho idea di come risolvere l'errore.

    Leggendo qua e là spiegano che la soluzione al problema sta nell'inserire una immagine del grafico posto sul foglio di lavoro.

    Se possibile vorrei farti qualche domanda.

    E' effettivamente possibile usare un controllo per grafico? Esiste un pacchetto completo di controlli ActiveX da inserire nei controlli aggiuntivi? 

    Il controllo ActiveX Image c'è, è quella la strada che devo percorre per raggiungere lo scopo? Ed usare i file di esempio prima citati?

    Spero di essere stato completo nella richiesta, non vorrei farti perdere altro tempo.

    Grazie mille.

    Saluti Danilo.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-11-29T14:54:18+00:00

    Ciao Danilo,

    navigando in internet ho trovato due esempi relativi all'inserimento di un grafico nella UserForm.

    il primo è di:

    'Pasting from the Clipboard to a Userform Image control

    'By Stephen Bullen,  *** L'indirizzo di posta elettronica viene rimosso per motivi di privacy ***

    l'altro è di:

    'Developed by John Walkenbach, JWALK AND ASSOCIATES

    'Copyright 1999. All rights reserved.

    'May be used and distributed freely, but may not be sold.

    'http://www.j-walk.com/ss/

    come già ben sapete si tratta di una immagine che viene incollata sulla UserForm.(se non ho capito male)

    Sapete dirmi cortesemente, se esiste un controllo ActiveX da inserire nei controlli aggiuntivi e dove poter scaricare tale file?

    Oltre ai metodi suggeriti da Stephen Bullen e John Walkenbach,

    si può inserire un'immagine direttamente nella Userform stessa; oppure si può inserirla in qualsiasi controllo sulla Userform, a patto che il controllo abbia la proprietà Picture. Un'imagine può essere caricata sia in fase di progettazione che in fase di esecuzione della Userform. Nel primo caso, si assegnerebbe il percorso dell'immagine alla proprieta Picture del controllo interessato; in fase di esecuzione, si sfrutterebbe invece la funzione LoadPicture

    Forse, però, quello che tu stai cercando sia il controllo activeX Image, il quale può essere trovato tra i controlli aggiuntivi.

    Detto questo, non sono sicuro quale sia il tuo obiettivo e, per offrirti un aiuto più concreto, credo sia necessario che tu lo spiegassi più dettagliamente.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento