gbr8 ha scritto:
tutto perfetto ma putroppo nel mio caso mi esclude gli articoli che hanno il trattino (-) cosa posso fare? es. articoli 001;001-1;010;341-B;341-D;0-122 ecc. Perchè non vedo gli articoli che contegngono il trattino?
Siccome t'ho "portato" io qui, provo a seguirti. Non uso vba con Excel quindi potrei anche dire qualche strafalcione. Cerco di limitarmi ad analizzare il codice in "puro vba" senza considerare che si tratta di Excel.
mFoto dovrebbe contenere l'articolo, se non ho capito male.
Primo suggerimento: dichiarazione di tutte le variabili. mFoto in assenza di dichiarazione esplicita è Variant. Non vorrei che "001-1" venisse letto come un'operazione matematica.
Sub InsImg()
Dim mPath As String
Dim r As Integer, lr As Integer, i As Integer
Dim mFoto As String
Fatto questo, hai verificato se entra nella parte True del secondo If, quello che inizia con If Dir?
Fa' una cosa del genere
Sub InsImg()
Dim mPath As String
Dim r As Integer, lr As Integer, i As Integer
Dim mFoto As String
Application.ScreenUpdating = False
ActiveSheet.Shapes.SelectAll
Selection.Delete
mPath = ActiveWorkbook.Path
r = 2 ' riga inizio prodotti
Lr = Range("A" & Rows.Count).End(xlUp).Row ' ultima riga da analizzare
For i = r To Lr
mFoto = Cells(i, 1)
If Len(mFoto & "") <> 0 Then ' se c'e' il nome prodotto
If Dir(mPath & "\" & mFoto & ".jpg") <> "" Then ' se la foto esiste
' inserisce foto e adatta a dimensioni cella/colonna B
With ActiveSheet.Pictures.Insert(mPath & "\" & mFoto & ".jpg")
'NOTA: in blu per centrare la foto nelle celle (puoi ovviamente variare), altrimenti vengono una attaccata all'altra
.Top = Range("B" & i).Top + 5
.Left = Range("B" & i).Left + 5
.Height = Range("B" & i).Height - 10
.Width = Range("B" & i).Width - 10
End With
Else
Debug.Print "cella saltata: A" & i & "; mFoto = " & mFoto '<== riga da aggiungere
End If
End If
Next i
Application.ScreenUpdating = True
End Sub
in questo modo vedi quali celle eventualmente salta e il valore che contiene la variabile mFoto (le vedi nella finestra immediata)
Se vuoi poi fare un debug passo passo modifica ulteriormente il codice così
...
mFoto = Cells(i, 1)
If InStr(1, mFoto, "-", 1) > 0 Then Stop '<=== altra riga da aggiungere eventualmente
If Len(mFoto & "") <> 0 Then ' se c'e' il nome prodotto
...
Quella riga ferma l'esecuzione del codice quando mFoto contiene un trattino.
Se tutto questo non porta a niente, c'è questa possibilità: ci sono due tipi di trattino diversi: il segno "meno", quello con codice ASCII 45 e quello più lungo. Per capirci quello che (almeno nel mio computer) Word sostituisce al segno meno quando lo scrivi tra due parole, di cui però non sono riuscito a trovare il corrispondente codice, nemmeno nella mappa caratteri.
Copiaincollando su notepad++ due parole intervallate dal trattino lungo "alla Word" e scrivendo a mano le stesse due parole separate dal segno meno, il "trova" di notepad++ rileva solo uno dei due, non entrambi, a dimostrazione che seppur visivamente uguali (almeno su notepad++) hanno in realtà contenuto diverso.
Ho provato anche con il nome del file. Ho usato sempre il copia incolla (non ho capito come digitare da tastiera il "tratto lungo") ma se il file è stato creato con quello non viene riconosciuto se nella funzione Dir uso un nome digitato a mano con il segno meno.
Edit: trovato. Il trattino "lungo" ha codice ASCII 150