problema macro inserimento immagini in Excel 2003

Anonimo
2020-04-02T18:10:53+00:00

**Buongiorno, vorrei sottoporre il seguente quesito per sapere se qualcuno mi può aiutare a venirne a capo.Premessa: uso Excel 2003, con le macro ho avuto poche occasioni di utilizzo e di VBA non ne so quasi nulla (non so ora, ma ai miei tempi a ragioneria indirizzo programmatori non lo insegnavano).Sto provando a realizzare un file xls, che chiamerò report, che attinge alcuni dati da un altro file xls che chiamerò db.In tale report sto cercando di inserire tre immagini: La prima è un qrcode inserito tramite una macro chiamata INS_QRCODE attivata da un pulsante e una volta inserito rimane fisso. Le altre due vengono inserite tramite una macro chiamata INS_IMMAGINI attivata da un pulsante e dall’apertura del file. Questo perché devono aggiornarsi per essere allineati al db.Entrambe le macro sono fatte con lo stesso metodo e attingono i nomi file delle immagini da inserire, da celle del foglio del report. Ma, mentre il qrcode è ricavato da una formula che una volta ottenuto il risultato resta fisso e di fatto non è mai vuoto, le altre due immagini invece sono variabili e i rispettivi nomi sono estratti dal db e possono anche non esserci. La prima macro sembra funzionare:Inserisce l'immagine giusta se presente, mentre, sebbene la cella di rif non sia mai vuota, le istruzioni associate all'eventualità di cella vuota (visualizzare il messaggio di errore ed inserire un'immagine sostitutiva qrcode mancante) vengono eseguite quando non viene trovato il file del qrcode (quindi non fa quanto scritto nel codice della macro, ma fa quello che mi serve).La seconda macro invece (per ora scritta solo per un'immagine anziché due) funziona solo in parte:Quando c'è un'immagine da inserire la inserisce. Se invece la cella col nome immagine è vuota, la macro elimina la vecchia eventualmente presente come dovrebbe ma poi va in errore come se volesse comunque inserire un'immagine senza trovarla, mentre al massimo dovrebbe eseguire l'inserimento di un'immagine sostitutiva vuota.Sono io che non ho capito cosa dovrebbero fare ste due macro oppure ho sbagliato a scrivere qualche istruzione? (sotto riporto i codici delle due macro)Grazie dell’attenzione e di ogni eventuale consiglio / suggerimentoMary___Sub INS_QRCODE()myf = Cells(4, 9).Value  <--- contiene il nome file dell'immagine da inserire ND = Cells(5, 9).Value   *<--- contiene il nome file dell'immagine sostitutiva (qrcode non trovato)*If Dir(myf) = "" Then MsgBox ("QRCODE NON TROVATO") ActiveSheet.Pictures.Insert(ND).Select With Selection .ShapeRange.LockAspectRatio = msoFalse .Top = Range("B5").Top .Left = Range("B5").Left .Width = 40 .Height = 40 End With ElseActiveSheet.Pictures.Insert(myf).Select With Selection .ShapeRange.LockAspectRatio = msoFalse .Top = Range("B5").Top .Left = Range("B5").Left .Width = 40 .Height = 40 End With End IfEnd Sub___Sub INS_Immagini()IV = Cells(6, 9).Value <--- contiene il nome file dell'immagine vuota SCH1 = Cells(28, 9).Value <--- contiene il nome file dell'immagine da inserire FOTO1 = Cells(28, 10).Value <--- contiene il nome file di una seconda immagine da inserire (per ora predisposizione)If Dir(SCH1) = "" Then Call DeleteImage ActiveSheet.Pictures.Insert(IV).Select With Selection .ShapeRange.LockAspectRatio = msoFalse .Top = Range("B28").Top .Left = Range("B28").Left .Width = 160 .Height = 120 End With ElseCall DeleteImage ActiveSheet.Pictures.Insert(SCH1).Select With Selection .ShapeRange.LockAspectRatio = msoFalse .Top = Range("B28").Top .Left = Range("B28").Left .Width = 160 .Height = 120 End With End IfEnd Sub

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

7 risposte

Ordina per: Più utili
  1. Anonimo
    2020-04-05T12:34:11+00:00

    Ciao Mary,

    Nella prima macro, sostituisci

    Sub INS_QRCODE()myf = Cells(4, 9).Value  <--- contiene il nome file dell'immagine da inserire

    con:

    Public Sub INS_QRCODE()

        Dim myf As String

        Dim ND As String

        With Cells(4, 9)

            If IsEmpty(.Value) Then

                myf = "zzz"

            Else

                myf = .Value   '<--- contiene il nome file dell'immagine da inserire

            End If

        End With

    Nella tua seconda macro, sostituisci

    Sub INS_Immagini()IV = Cells(6, 9).Value  <--- contiene il nome file dell'immagine vuota SCH1 = Cells(28, 9).Value <--- contiene il nome file dell'immagine da inserire FOTO1 = Cells(28, 10).Value <--- contiene il nome file di una seconda immagine da inserire (per ora predisposizione)

    con:

    Public Sub INS_Immagini()

        Dim IV As String

        Dim SCH1 As String, FOTO1 As String

        IV = Cells(6, 9).Value  '<--- contiene il nome file dell'immagine vuota

        With Cells(28, 9)

            If IsEmpty(.Value) Then

                SCH1 = "zzz"

            Else

                SCH1 = .Value   '<--- contiene il nome file dell'immagine da inserire

            End If

        End With

        With Cells(28, 10)

            If IsEmpty(.Value) Then

                FOTO1 = "zzz"

            Else

                FOTO1 = .Value   '<--- contiene il nome file dell'immagine da inserire

            End If

        End With

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2020-04-04T17:49:27+00:00

    Non ho specificato che, quando SCH1 è vuoto, il messaggio di errore visualizzato è:

    Errore di run-time "1004"

    Impossibile trovare la proprietà Insert per la classe Pictures

    e se clicco su debug in VBA mi evidenzia questa istruzione:

    ActiveSheet.Pictures.Insert(SCH1).Select

    come se volesse eseguirla anche se dovrebbe saltarla ed eseguire le prime istruzioni (che non esegue).

    (che io sappia se SCH1="" la macro dovrebbe eseguire le prime istruzioni e saltare quelle comprese tra else ed end if, o sbaglio?)

    Ho anche fatto un altro paio di prove:

    prova 1:

    ho invertito le cose, cioè ho scritto la macro in modo che se SCH1 è diverso da "" inserisce SCH1, altrimenti dovrebbe inserire l'immagine tutta bianca (IV).

    in questo caso quando SCH1 è un'immagine valida esegue tranquillamente le prime istruzioni ed inserisce l'immagine giusta, se invece SCH1 è "" va comunque in errore non saltando alle istruzioni scritte dopo else (inserimento immagine vuota).

    quindi in questo caso fa in contrario, eseguendo sempre le prime istruzioni invece di saltarle e passare a quelle dopo else.

    prova 2:

    ho modificato la macro sostituendo le istruzioni dopo else solamente con la visualizzazione di un messaggio.

    risulta quindi che se SCH1="" dovrebbe visualizzare un messaggio "immagine non trovata" e dovrebbe inserire l'immagine IV, altrimenti visualizzare un messaggio "immagine trovata".

    in questa prova sia con SCH1="" che diverso, viene visualizzato il messaggio "immagine trovata" quindi in conclusione esegue sempre e solo le istruzioni relative al caso in cui SCH1 è diverso da "".

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-04-04T10:08:51+00:00

    Ciao Mary,

    Per indagare il tuo problema, e quando non c'è un'immagine da inserire, nella tua seconda macro, sostituisci

    If Dir(SCH1) = "" Then

    con:

        MsgBox TypeName(SCH1)

        If Dir(SCH1) = "" Then

    e fammi sapere il messagio che viene visualizzato.

    =

    Regards,

    Norman

    Ciao, ho provato e il messaggio visualizzato dice String.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-04-03T11:22:42+00:00

    Ciao Mary,

    Per indagare il tuo problema, e quando non c'è un'immagine da inserire, nella tua seconda macro, sostituisci

    If Dir(SCH1) = "" Then

    con:

        MsgBox TypeName(SCH1)

        If Dir(SCH1) = "" Then

    e fammi sapere il messagio che viene visualizzato.

    ===

    Regards,

    Norman

    Grazie, proverò e farò sapere il risultato.

    Per ora buon pranzo (se non hai ancora mangiato) e buona giornata

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2020-04-03T10:56:26+00:00

    Ciao Mary,

    Per indagare il tuo problema, e quando non c'è un'immagine da inserire, nella tua seconda macro, sostituisci

    If Dir(SCH1) = "" Then

    con:

        MsgBox TypeName(SCH1)

        If Dir(SCH1) = "" Then

    e fammi sapere il messagio che viene visualizzato.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento