VBA excel 2003 e 2011



  • VBA excel 2003 e 2011
    di asdrubale87 data: 24/08/2016 14:31:47

    Ciao a tutti, ho una macro che utilizzo da anni su un windows xp con installato excel 2003 e funziona perfettamente.
    il suo lavoro è di prendere delle foto salvate in una cartella, inserire nell'excel e fare la copia della foto in un'altra cartella. a fine lavoro compare la scritta "inserimento terminato"
    ho provato a farla girare su un mac con installato excell 11 e la macro non ha funzionato, nel senzo che il messaggio "inserimento terminato" è comparso, ma le foto non sono state ne inserite ne copiate, senza però segnalare errori di scrittura nel vba.
    allego il codice così come lo uso, ci sono un pò di appunti per ricordarmi cosa avevo fatto.
    il tutto è gestito da un user form dove inserisco le textbox
     
    Sub Immagine()
    
    Application.ScreenUpdating = False 'con questo comando fai in modo che non vedi i movimenti a video quando cambia fogli
    
    Dim valore As String
    Dim riga As Integer
    Dim colonna As String
    Dim colonna_foto As String
    
    'riga = n° riga da dove iniziare a inserire immagini
    riga = TextBox3
    colonna = TextBox4
    colonna_foto = TextBox5
    
    'inizia il ciclo
    
    Do
    
    'seleziona cella da dove prendere nome foto e lo copia in "valore"
        Range("" & colonna & "" & riga & "").Select
        valore = ActiveCell.FormulaR1C1
    ' seleziona cella da dove mettere la foto
        Range("" & colonna_foto & "" & riga & "").Select
        
        If valore = "" Then Exit Do 'esce dal ciclo quando finiscono le celle con valore
        
    ' inserisce immagine da percorso
        On Error Resume Next
        ActiveSheet.Pictures.Insert( _
            "" & TextBox1 & "" & valore & "." & TextBox2 & "").Select
    
    On Error Resume Next 'se non trova l'immagine passa alla successiva
    
    ' comprime immagine (non funziona)
        'Selection.ShapeRange.PictureFormat.Brightness = 0.5
        'Selection.ShapeRange.PictureFormat.Contrast = 0.5
        'Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic
        'Selection.ShapeRange.PictureFormat.CropLeft = 0#
        'Selection.ShapeRange.PictureFormat.CropRight = 0#
        'Selection.ShapeRange.PictureFormat.CropTop = 0#
        'Selection.ShapeRange.PictureFormat.CropBottom = 0#
    
    ' ridimensiona immagine
        Selection.ShapeRange.LockAspectRatio = msoTrue
    
     
        Selection.ShapeRange.Width = 60
        If Selection.ShapeRange.Height > 41 Then
        
        Selection.ShapeRange.Height = 40
        End If
             
        Selection.ShapeRange.Rotation = 0#
            
    ' sposta immagine
        Selection.ShapeRange.IncrementTop 2.25
        Selection.ShapeRange.IncrementLeft 2.25
    
    
    riga = riga + 1
    
    'se la check box2 è barrata copia l'immagine
    
    If CheckBox2 = True Then
    
    Dim fso
    Dim file As String, sfol As String, dfol As String
    file = valore & "." & TextBox2 ' immagine (la prende dalla cella
    sfol = TextBox1 & "" ' da dove prende le foto
    dfol = TextBox6 & "" ' dove mettere le foto
    Set fso = CreateObject("Scripting.FileSystemObject")
       fso.CopyFile (sfol & file), dfol, True
    End If
    
    'se la check box è barrata inserisce una sola immagine
    If CheckBox1 = True Then Exit Do
    
    Loop
    
    'se la check box3 è barrata rinomina le foto copiate
    
    If CheckBox3 = True Then
    
    mFolder = TextBox6 & ""
    r = TextBox3
    Do Until Cells(r, 5) = ""
        OldName = mFolder & Cells(r, 5).Value & ".jpg"
        NewName = mFolder & Cells(r, 18) & " - " & Cells(r, 5) & " - " & Cells(r, 19) & ".jpg"
        If Dir(OldName) <> "" Then
            Name OldName As NewName
        End If
        r = r + 1
    Loop
    End If
    
    'Loop
    
    MsgBox "inserimento terminato"
    End Sub



  • di patel data: 24/08/2016 15:39:04

    il problema sono sicuramente i percorsi dei file, il mac come linux usa la / per separare le cartelle e non la come windows





  • di asdrubale87 data: 24/08/2016 16:58:58

    ciao patel, penso anche io che il problema sia nel percorso del file, ho provato a cambiare nel codice tutti gli "" con "/" ma il risultato non cambia, la macro gira "correttamente" ma non esegue l'inserimento e la copia delle foto.
    c'è ancora qualcosa che mi sfugge, il problema è che registrando la macro tramite mac non mi segna per intero il percorso del file, ma registra solo il nome tra due apici così: "nome_foto.jpg"



  • di patel data: 24/08/2016 17:52:13

    elimina o commenta la riga On Error Resume Next
    vedo che i percorsi sono nelle textbox, sei certo che siano corretti ? esegui le macro con F8 step by step e controlla dove nasce l'errore





  • di asdrubale87 data: 26/08/2016 10:40:06

    ho commentato la riga "On Error Resume Next " ed infatti l'errore è proprio li.
    l'intero codice viene evidenziato in giallo: ActiveSheet.Pictures.Insert( _
    "" & TextBox1 & "/" & valore & "." & TextBox2 & "").Select

    passando il muose sugli argomenti ho che:
    TextBox1 = "/User/alessio/Desktop/foto" (ok è il path dove è la foto)
    valore = "RS4" (ok è il nome delle foto)
    TextBox2 = "jpg" (ok è il formato della foto)

    l'errore segnalato dall'excel è: impossibile trovare la proprietà insert per la classe pictures

    registrando la macro mentre inserisco manualmente la foto ho:
    ActiveSheet.Pictures.Insert("RS4.jpg").Select

    strano non c'è il percorso del file... ma se provo a riprodurre questa macro la foto viene inserita correttamente...
    se modifico il nome della foto nella macro, con il nome di un'altra foto presente nella stessa cartella, viene inserita la nuova foto



  • di Vecchio Frac data: 26/08/2016 11:51:31

    1) probabilmente manca lo slash dopo ".../Desktop/foto" : dovrebbe essere ".../Desktop/foto/" seguito dal nome di file.
    2) Che non venga trovata la proprietà Insert fa pensare che invece non si debba usare Shapes.AddShape() oppure LoadPicture().





  • di asdrubale87 data: 26/08/2016 12:26:13

    ciao frac..
    per il punto 1) lo "/" dopo la cartella e prima del nome file è inserito in automatico tra TextBox1 e valore: "" & TextBox1 & "/" & valore & "." & TextBox2 & ""
    per il punto 2) ho provato a sostituire "ActiveSheet.Pictures.Insert(" con "ActiveSheet.Shapes.AddShape(" e "ActiveSheet.LoadPicture(" ma viene visualizzato il messaggio di errore "runtime 438"

    questa macro la tengo dentro un componente aggiuntivo caricato in excel, ho provato ad esportare l'user form e ad inserirlo in foglio excel vuoto.
    l'esportazione è andata a buon fine, ma al momento dell'importazione esce un messaggio di errore, che crea questo log:

    Riga 8: riferimento di file non valido nella proprietˆ OleObjectBlob in UserForm1.

    allego anche il file UserForm



  • di Vecchio Frac data: 26/08/2016 13:00:57

    Dovresti allegare il file vol.frx che dovrebbe essere esportato quando esporti il file frm (il file frx è un file di dati binari che contiene informazioni relative alle picture coinvolte)





  • di asdrubale87 data: 26/08/2016 13:05:47

    ho allegato il file vol.frx