PRESENTAZIONE
Buona sera a tutti. Mi presento: sono MGM e da qualche giorno sono disoccupato. Quindi sto facendo un lavoro per un'amica che ha un ecommerce.
INTRO
Ad oggi il caricamento su ecommerce lo fa tramite un csv che deriva da un Excel da delirio.
Glielo sto riportando su access perché tra poco cambiera' la piattaforma e le toccherà aggiungere millemila informazioni a quelle che ha ora per ogni riga di Excel.
In pratica le sto facendo una specie di sporco gestionale. Niente di complicato ma la vera menata è che, per consentirle un passaggio smooth dal vecchio Excel al nuovo Access, mi tocca mantenere alcune funzionalità che poi getterà nello sciacquone ma che fino al switch over le servono.
COSA HO ORA
In particolare l'excel utilizza una funzione di trasformazione che converte il codice dei prodotti dei suoi fornitori composto da numeri e lettere un (es.AP123456) in un codice proprietario. Poi con un CONCATENATE mette insieme un prefisso identificativo del fornitore+il codice convertito dalla funzione.
La funzione in VBA già l'avevo fatta in Excel. Semplicemente la lanciavo ad ogni modifica della cella che contiene. Poi in un'altra cella concatenavo il prefisso del fornitore con il convertito dalla funzione.
es: Immaginiamo che sia il record
CELLA B3 = codice prodotto fornitore (es.AP123456)
CELLA C3= trasf(B3) --> questo è il lancio della funzione che trasforma B3 nel codice nuovo.
CELLA D3= LM_ --> questo è il prefisso del fornitore
CELLA E3 (risultato) = CONCATENA D3+C3
PROBLEMA
Vi chiedo aiuto perché non riesco a capire, in access, come (da dove) lanciare la funzione in modo che mi trasformi tutti i codici degli oltre 5000 prodotti che ha a magazzino.
Quello che vorrei, alla fine, e' avere una maschera in cui la mia amica inserisca il codice prodotto fornitore + il fornitore e lui si facesse automaticamente la trasformazione scrivendo i valori in una tabella.
COSA HO FATTO
Ho creato la funzione in un modulo. Poi ho creato una [TabellaNuova] dove ci sono: i codici prodotto originali (la cella B3 in excel), il prefisso (D3), il campo che diventerà risultato finale (E3).
(A regime, ovviamente, B3 e D3 li prenderò da altre tabelle apposite).
Per ora me ne frego anche del concatenate perché non riesco proprio a far lanciare la funzione.
Avrei pensato di fare una query. L'ho fatta e ci ho messo semplicemente:
Espr1: [E3]=trasf([TabellaNuova].[B3])
ma mi viene dato un errore "funzione trasf non definita nell'espressione" come se la trasf non fosse legata a niente.
A dire il vero questo mi succede oggi. Ieri sera, quando l'ho creata, qualsiasi valore che io infilassi in "B3", mi andava in palla il debugger dicendomi che gli passavo un nul su nn (vedi oltre).
LA FUNZIONE E' QUESTA
Function TRASF(nn)
Dim x&, l1&, l2, l3$
nn = UCase(nn)
l1 = Len(nn)
For x = 1 To l1
l2 = Mid(nn, x, 1)
If Not IsNumeric(l2) Then l3 = l3 & "-" & l2 ' se non è un numero (è un char), lascia l3 uguale ma mettici il - prima
If IsNumeric(l2) Then
Select Case l2 ' questo sostituisce i numeri con le lettere
Case 0: l2 = "A"
Case 1: l2 = "B"
Case 2: l2 = "C"
Case 3: l2 = "D"
Case 4: l2 = "E"
Case 5: l2 = "F"
Case 6: l2 = "G"
Case 7: l2 = "H"
Case 8: l2 = "I"
Case 9: l2 = "J"
End Select
l3 = l3 & l2
End If
Next x
TRASF = l3
End Function
DOMANDA
Dov'è che sto commettendo la tavanata galattica?
RINGRAZIAMENTI
ringrazio infinitamente chiunque avrà la pazienza e la cortesia di perdere un po' di tempo a rispondermi. Se dovete insultarmi, fatelo piano.