| | 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 | | OFFLINE |
|
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 | | OFFLINE |
|
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 |
| | 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 | | OFFLINE |
|
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 | | OFFLINE |
|
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 🤩 |
|
|