› Excel e gli applicativi Microsoft Office › Help per file tutorial online
-
AutoreArticoli
-
Comunque, dal file di test che hai allegato al messaggio che era finito in spam, l'applicazione del principio non è diverso da quello che avevi già visto con il mio esempio, solo che hai utilizzato un range come sorgente di riga della listbox invece che una scansione di directory. In ogni caso poi associ alla proprietà Picture dell'immagine il percorso/nome di file prelevato da una delle colonne del listbox.
C'è un On Error a inizio codice che è fuorviante perché in modo silente e subdolo non ti mostra gli errori di codice. Toglilo quando fai i test 🙂
Per il resto, sarebbe da vedere il file che produce errore, non questo di test, perchè su questo tutto fila alla perfezione. Quando ottieni l'errore fai uno screenshot e allegalo.
Ho giusto 5 minuti per scrivere da casa,dove ho il file che sto cercando di modificare. Allego screenshots dell'errore e del debug. Il punto e' che non posso dare nelle proprieta' un range come nel file di test, ma dovrei seguire il percorso dove va ad attingere la cmb_Product. Quando non si ha il tempo necessario da dedicarci e' un casino.Grazie
Allegati:
You must be logged in to view attached files.non posso dare nelle proprieta' un range come nel file di test
Bè perché no? Lo fai da codice. Nell'evento Initialize del userform imposti la proprietà ListBox.RowSource in modo opportuno.
dovrei seguire il percorso dove va ad attingere la cmb_Product
Non ho capito cosa intendi 🙂
Nel messaggio che ho recuperato dici:
Non posso dare un nome alla selezione e riportarlo nelle proprieta' rowsource della Cmb_Product perche' mi restituisce l'errore. Il principio dovrebbe essere quello del file di esempio ma non capisco come far leggere dalla lista cmb_Product.Il codice può impostare la proprietà RowSource della combobox nella forma range("nome").address.
Grazie, soprattutto perche' cerchi di farmi arrivare da solo alla soluzione. Da quello che ho capito in questo breve tempo di sbattimenti di testa con il VBA mi sono reso conto ( e correggimi se sbaglio ) che le istruzioni sotto forma di codici seguono una sorta di informazioni in lingua inglese, cose se stessimo parlando ad una macchina e volessimo fargli eseguire un ordine. Se volessi far comparire a schermo un messaggio gli do il comando msgbox"bla bla bla" se volessi far eseguire un operazione devo creare delle variabili e poi non fare altro che dirgli di eseguire l'operazione. In questo caso io voglio dire : Prendi il testo che scelgo dalla combobox e alla selezione inseriscimi l'immagine corrispondente nel riquadro immagine. Siccome, come detto nel primo messaggio, il programma non e' farina del mio sacco ma lo uso come un esercizio pratico per cercare di capire come funzionano i vari codici e fermo restando che mi servirebbe un corso, quantomeno base, di vba....mi sono perso nei meandri di un codice fatto da un altro...
Dovrei rifarlo da zero, da solo e con informazioni di base, ma non so se il risultato riuscirei a raggiungerlo....
Un applauso te lo meriti per la tenacia e la voglia di metterti in gioco
Hai detto cose giuste sulla filosofia dei linguaggi di programmazione (in generale), non solo di VBA. La particolarità di questo linguaggio di scripting (ci infiliamo anche un po' di gergo, così entri nello spirito di squadra 🙂 ) è che è associato a delle Applicazioni specializzate (Word nell'editing dei testi, Excel nella manipolazione di dati e formule, Access nella gestione delle basi di dati, e altri di Microsoft che condividono lo schema del "modello a oggetti"). VBA sta per Visual Basic (che ne è il padre fondatore) for Application (quindi è una versione di VB studiata per adattarsi alle Applicazioni menzionate).
Inoltre quando descrivi a parole un problema e ne configuri la soluzione, stai creando un algoritmo che in sè è risolvibile con qualsiasi linguaggio. Noi sfruttiamo il legame tra VBA e le applicazioni che lo supportano per fare meglio, più rapidamente e in modo automatizzato quelle operazioni che se fatte a mano risultano noiose, banali, ripetitive o semplicemente troppo lunghe.
Si parte di solito dal registratore di macro per analizzare uno schema di codice autoprodotto. Ma si spulcia anche il codice prodotto da altri, italiani e non: sapere l'inglese aiuta ma non è strettamente necessario (io ne sono un esempio vivente).
Rifare i propri progetti serve non solo per la propria crescita ma anche per la soddisfazione di un prodotto sempre unico. Dipende sempre dall'obiettivo che uno si dà 🙂
Eccomi qua. Volevo aggiungere il seguente codice nella cmb_Product, e vorrei capire dove sbaglio e perche'.
If Me.cmb_Product.Value <> "" Then
Me.img_foto.Picture = LoadPicture(Application.WorksheetFunction.VLookup(Me.cmb_Product, sh.Range("B:E"), 4, 0))
End IfIn pratica gli sto dicendo ( o almeno credo...
), se il valore della combo Prodotto e' diverso da nullo, allora inserisci nel riquadro img_Photo un immagine cge preleverai da questo progetto nel folio Product_Master nel range B:E alla posizione 4 ( che e' la E, dove ho inserito il link della foto ).Ovviamente mi da errore e mi evidenzia tutta la riga me.img.........etc...etc.
Io sarei più tranquillo a consigliarti di usare Find invece che Vlookup in quel modo.
Se in colonna B ci sono i valori che selezioni nella combo, e in colonna E il percorso dei file immagine, allora
if cmb_product <> "" then set f = sh.range("B:B").Find(cmb_product, lookin:=xlvalues, lookat:=xlwhole) if f is nothing then exit sub img_foto.picture = laodpicture(f.offset(,3) end ifdovrebbe dare il risultato richiesto.
Quindi il tuo codice dice: se il valore della cmb_Product e' nullo allora imposta f come range B, cerca e trova valori nella cmb_Product. Se f non c'e' allora esci dalla sub. Nella img_Photo carica l'immagine del range f alla riga 3.
Lo provero' stasera e ti aggiornero', ma e' un linguaggio veramente da scoprire, con tante sfumeture e modi di interpretare diversi.
mi da errore
Che tipo di errore? Perché in sè la riga mi sembra corretta. Potrebbe essere che il file non esiste o non si chiama così?
imposta f come range B, cerca e trova valori nella cmb_Product
Rectius: cerca in colonna B il valore selezionato in cmb_Product, se lo trovi restituisci un riferimento a tale cella e assegna il riferimento a una variabile di tipo range chiamata "f" (che diventa essa stessa una cella, dotata di tutte le proprietà tipiche, come Row e Column). La ricerca viene fatta per valori e non per formule, e deve interessare l'intero contenuto ("orto" deve restituire "orto" ma non "corto" o "ortolano").
e' un linguaggio veramente da scoprire, con tante sfumeture e modi di interpretare diversi.
Infatti ci sono linguaggi migliori, con minori sfumature e possibilmente zero interpretazioni 🙂
Quello che volevi dire è che si può ottenere un risultato in modi diversi, sapendo utilizzare i metodi, le proprietà e i comandi più adatti allo scopo. Il bello dei forum è che spesso trovi soluzioni alternative tutte valide ma alcune più performanti di altre.
Grazie infinite per queste lezioni, bellissimo questo approccio e tu sei una persona veramente squisita. Piacevole conversazione.
Grazie. Aggiungo che davanti a una birra sarebbe anche meglio 😀 🍺
Ho utilizzato sia il codice che avevo fatto io e sia quello che mi hai fatto tu con il find. In pratica non ho nessun errore, il file funziona come prima ma non mi restituisce la foto nella img_Photo. Il file esiste ed il collegamento l'ho preso dalla Tab Sicurezza nelle proprieta' del file.
L'immagine è in un formato supportato? (bmp o jpg ma non png).
Allega file e un'immagine di prova.
Se non puoi per motivi tuoi, scrivimi una mail in privato (io poi di solito cancello le mail con file riservati e del resto non me ne faccio niente 🙂 )
Si, l'immagine e' supportata. E' la stessa che ho utilizzato per il test che avevo gia' allegato.
Nessun problema ad allegare il file.Comunque per me e' solo un esercizio, nienete di segreto.
Allegati:
You must be logged in to view attached files.Bè ma la soluzione è facile... e tutto funziona 🙂
Tu nel codice hai impostato un offset alla quarta colonna dopo la B, ma deve essere la terza (nel mio codice era così infatti ^_^)
Correggi così e vedrai che fila:
Me.Image10.Picture = LoadPicture(f.Offset(, 3))Buongiorno, avevo provato ma mi restituiva un errore di percordo del file non riconosciuto ( o qualcosa del genere ). Poi ho copiato ed incollato di nuovo lo stesso percorso e me lo da alla perfezione. Ho visto che c'e' una specie di corso su questo sito. Me lo vado a vedere, chissa' non impari qualcosa.....sperando che sia per Dummies...
Ciao, sto seguendo ( oltre alla guida su questo sito ) dei tutorial di Gerardo Zuccala' che devo dire mi stanno aiutando molto. Nel file in allegato in passato ho notato che se non inserisco il prodotto o il type oppure la quantita' mi fa vedere correttamente i messaggi di errore impostati ma dopo mi blocca l'esecuzione della userform e mi da l'errore in allegato, e facendo il debug mi evidenzia la parte di codice della moltiplicazione tra la quantita' ed il rate ( anche in allegato ). Io ho provato a dirgli if me.cmb_Product.value<>"" or me.cmb_Type<>"" or txt_Qty<>"" then exit sub end if, ma non lo tiene in considerazione.
Allegati:
You must be logged in to view attached files. -
AutoreArticoli
