È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

form visualizzazione grafici

Ultimo Aggiornamento: 06/11/2021 00:29
Post: 19
Registrato il: 22/07/2016
Città: TORINO
Età: 67
Utente Junior
2016
OFFLINE
03/11/2021 23:16

Ciao, ho un problema con un form di visualizzazione grafici.
Quando apro il file e lancio il form “myform” mi compare il messaggio : Errore di run-time ‘481’: Immagine non valida, schiacciando su debug, mi evidenzia la riga:
<< Me.Image1.Picture = LoadPicture(VBA.Environ("TEMP") & Application.PathSeparator & "Grafico.jpg") >>
se cambio la disposizione dei grafici nel foglio “Grafici” lancio il form “myform” seleziono 1 per volta i grafici nella combobox e tutto funziona, a questo punto salvo e chiudo il file.
Quando riapro nuovamente il file, appena lancio il form “myform” mi compare nuovamente il messaggio : Errore di run-time ‘481’: Immagine non valida, dando ok su debug, mi evidenzia la riga:
<< Me.Image1.Picture = LoadPicture(VBA.Environ("TEMP") & Application.PathSeparator & "Grafico.jpg") >>
Come posso risolvere?
Grazie per l’aiuto
GioCas
Post: 955
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
ONLINE
04/11/2021 05:53

Ciao

Aprendo il file e lanciando l'UF a me funziona regolarmente.
Per una maggiore snellezza inserisci un pulsante nel Foglio che apra la UserForm

Ciao,
Mario
Post: 19
Registrato il: 22/07/2016
Città: TORINO
Età: 67
Utente Junior
2016
OFFLINE
04/11/2021 12:52

form visualizzazione grafici
Ciao Marius 44, ciao, ho seguito il tuo consiglio ma il risultato è il medesimo, tu hai provato a aprire e lanciare la UF, poi chiudere completamente il file, riaprire excel e rilanciare la UF.
Intanto in rete ho trovato degli esempi più o meno simili, li ho adattati al mio ma anche con questi nuovi sistemi il risultato è il medesimo, però gestiscono tutti max 3 grafici. Non vorrei che fosse un problema generato dal file temporaneo.
Continuo a provare e spero in un aiuto.
GioCas 😉
Post: 6.571
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
04/11/2021 16:03

Ciao, ho fatto le prove ed in effetti si blocca, perche non riesce a creare l'immagine del grafico, a volte funziona ed altre volte no.

secondo me dovresti prima selezionare il grafico e poi creare l'immagine.

in rete ho trovato questo codice che crea l'immagine del grafico selezionato, vedi se può esserti utile.

Sub ExportChart()
Const sSlash$ = "/"
Const sPicType$ = ".gif"
Dim sChartName$
Dim sPath$
Dim sBook$
Dim objChart As ChartObject
On Error Resume Next
Set objChart = ActiveSheet.ChartObjects(1)
If objChart Is Nothing Then
MsgBox "No charts have been detected on this sheet", 0
Exit Sub
End If
If ActiveChart Is Nothing Then
MsgBox "You must select a single chart for exporting ", 0
Exit Sub
End If
Start:
sChartName = Application.InputBox("Please Specify a name for the exported chart" & vbCr & _
"There is no default name available" & vbCr & _
"The chart will be saved in the same folder as this file", "Chart Export", "")
If sChartName = Empty Then
MsgBox "You have not entered a name for this chart", , "Invalid Entry"
GoTo Start
End If
If sChartName = "False" Then
Exit Sub
End If
sBook = ActiveWorkbook.Path
sPath = sBook & sSlash & sChartName & sPicType
ActiveChart.Export Filename:=sPath, FilterName:="GIF"
End Sub


vedi se riesci altrimenti tento io di aggiustarti la macro.

però pensandoci bene invece della casella di riepilogo(ComboBox) potresti usare gli OptionButton nel form per selezionare i 6 grafici, se sono solamente 6, ed inserire nella Caption il nome del grafico.

Ciao By Sal (8-D

[Modificato da by sal 04/11/2021 16:09]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 20
Registrato il: 22/07/2016
Città: TORINO
Età: 67
Utente Junior
2016
OFFLINE
04/11/2021 18:45

form visualizzazione grafici
Grazie bySal, ho provato il codice che hai postato ma non mi funziona. Se puoi ti chiedo ancora un'aiuto.
Utilizzo la combobox perchè viene utilizzato su un programma azionario ed interessa magari visualizzare solo un grafico spacifico.
In una scheda sono 6 i grafici da visualizzare, mentre in un altra 13.
Come sempre grazie.
GioCas
Post: 6.572
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
05/11/2021 08:29

Ciao Gio.Cas, era come ti dicevo, nella tua macro non selezionavi il grafico prima di creare l'immagine per inserirla nel form, e quindi non selezionato, a volte non creava l'immagine in quanto TMP era vuoto.

ti ho modificato la macro, ho aggiunto una sola riga per selezionare prima il grafico, la vedi nel codice VBA.

Private Sub Cambia_Grafico()

Dim Grafico As Chart
Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets("Grafici")
sh.Shapes(Me.ComboBox1.Value).Select '<----------------------- Riga aggiunta
Set Grafico = sh.Shapes(Me.ComboBox1.Value).Chart
Grafico.Export VBA.Environ("TEMP") & Application.PathSeparator & "Grafico.jpg"
Me.Image1.Picture = LoadPicture(VBA.Environ("TEMP") & Application.PathSeparator & "Grafico.jpg")

End Sub


ho fatto diverse prove e non si è bloccato, ti allego il file

Ciao By Sal (8-D
[Modificato da by sal 05/11/2021 08:34]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 956
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
ONLINE
05/11/2021 11:51

Salve a tutti

@by Sal - Ottimo lavoro

Vorrei suggerire un'altra possibilità.
Nel Foglio1 (quello coi dati, ma si potrebbe fare anche in un altro foglio) ho aggiunto i 6 grafici da rappresentare; prima quello con tutte le serie e poi quello con solo la serie1, la serie2 ecc.
Quindi una convalida dati (invece del combo) nella cella I3 a cui fa riferimento questo codice
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("I3")) Is Nothing Then
  Select Case Target
    Case "tutti"
      cht = 1
    Case "serie1"
      cht = 2
    Case "serie2"
      cht = 3
    Case "serie3"
      cht = 4
    Case "serie4"
      cht = 5
    Case "serie5"
      cht = 6
  End Select
  With ActiveSheet
    For i = 1 To 6
      .ChartObjects(i).Visible = False
    Next i
    .ChartObjects(cht).Visible = True
  End With
End If
End Sub

Prova e vedi se ti viene più semplice.
Ciao,
Mario
Post: 21
Registrato il: 22/07/2016
Città: TORINO
Età: 67
Utente Junior
2016
OFFLINE
05/11/2021 18:41

form visualizzazione grafici
Ciao BySal,
per prima cosa grazie, ho provato le due soluzioni, quella dove hai aggiunto la riga mi funziona bene, mentre la seconda soluzione (tutte e due le soluzioni suggerite), mi si bloccano dopo 3 selezioni. non riesco a capire. Continuo a provare. Comunque come ti ho scritto sopra la prima soluzione mi permette di andare avanti.
Ti tengo aggiornato.
Grazie
GioCas [SM=g27811]
Post: 6.574
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
05/11/2021 19:35

Ciao la macro del post #4 te l'ho data come esempio da sviluppare, in quanto ti crea un immagine del grafico sul desktop, dovevi adattarla al tuo problema quindi puoi eliminarla e mantenere solamente, quella con l'aggiunta della riga.

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 957
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
ONLINE
05/11/2021 21:25

Ciao

@GioCas
Hai provato la mia soluzione? Ho fatto tantissime prove e non si è mai bloccata.

Ciao,
Mario
Post: 958
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Senior
Excel2019
ONLINE
05/11/2021 23:30

Ciao
Mi sono incaponito a cercare di capire perchè fa quello strano comportamento.
Non ci sono riuscito 😭🤢 ma poi ... ho pianto un po' meno😢 perchè ho trovato un'altra via.
Questo il codice
Private Sub Cambia_Chart()
Dim sh As String, cht As String, grf As String
Dim percorso

On Error Resume Next 'elimina il grafico precedente, se esiste
Kill ActiveWorkbook.Path & "\" & "Grafico*" & ".gif"
On Error GoTo 0

sh = "Grafici"
cht = ComboBox1.Value
grf = "Grafico"
percorso = ActiveWorkbook.Path & "\" & grf & ".gif"
 
  ActiveSheet.ChartObjects(cht).Activate
  ActiveChart.Export Filename:=percorso, Filtername:="GIF"
  Me.Image1.Picture = LoadPicture(percorso)

End Sub


Fai sapere. Ciao,
Mario
Post: 22
Registrato il: 22/07/2016
Città: TORINO
Età: 67
Utente Junior
2016
OFFLINE
06/11/2021 00:29

form visualizzazione grafici
Ciao Marius44,
ho provato la tua ultima soluzione e funziona bene, mentre quella precedente non sono riuscito a farla funzionare, o meglio mi andava in errore come la mia iniziale.
Rimango sempre più stupito della disponibilità fornitami sia da te Marius44 che da BySal, con soluzioni che mi permettono di imparare sempre di più.
Ps.: però anche per la soluzione che non mi funziona, non demordo e memore dei Vs. suggerimenti cercherò di capirne il perché.
Grazie
GioCas 🤩
Vota: 15MediaObject5,00612 6
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 19:25. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com