ACCESS - RICERCA DATI DA UNA TABELLA PER COPIARLI IN UN'ALTRA UTILIZZANDO IL CODICE VBA

Anonimo
2014-07-17T11:54:16+00:00

Buongiorno, ho verificato ma nella community non ho trovato soluzioni al mio problema. Spiego brevemente: ho una tabella denominata "NC" che all'interno ha un campo testo chiamato "Fornitore". Ho un'altra tabella chiamata "Fornitori" ed all'interno ha due campi: "Codice" (i valori immessi in questo campo sono gli stessi del campo "Fornitore" della tabella "NC") e "Descrizione". Ho creato una maschera sulla tabella "NC" e vorrei fare in modo che dopo aver compilato il campo "Fornitore" ci sia una semplice casella di testo non associata che riporti il valore del campo "Descrizione" della tabella "Fornitori" associato al rispettivo valore del campo "Codice" immesso nella maschera. Tutti i campi sono di tipo testo. Mi rendo conto che potrei risolvere il problema creando la maschera su una query che leghi le due tabelle ma sono curioso di sapere se esiste una funzione apposita utilizzando il VBA per ottenere lo stesso risultato. Ringrazio anticipatamente. Cordiali saluti

Microsoft 365 e Office | Access | 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
Risposta accettata dall'autore della domanda
Anonimo
2014-07-18T10:12:27+00:00

Ciao Ab387,

l'underscore è il simbolo per il ritorno a capo durante la digitazione del codice. In questo modo VBA capisce che l'istruzione continua nella riga successiva.

Volendolo eliminare l'struzione diventerebbe:


Private Sub Fornitore_AfterUpdate()

    If Not Len(Me!Fornitore.Value & "") = 0 Then

        Me!CasellaTestoNonAssociata.Value = Nz(DLookup("Descrizione", "Fornitori", "Codice = '" & Me!Fornitore.Value & "'"), vbNullString)

    Else

        Me!CasellaTestoNonAssociata.Value = vbNullString

    End If

End Sub


Veniamo ai nomi dei controlli: se ho capito correttamente questo codice si aspetta di trovare sulla maschera una casella di testo che si chiama "Fornitore", una casella di testo non associata che si chiama "CasellaTestoNonAssociata", una tabella che si chiama "Fornitori" contenente un campo che si chiama "Descrizione" e un campo che si chiama "Codice".

Se quanto sopra è vero, nell'evento dopo aggiornamento della casella di testo "Fornitore", se questo valore non è vuoto, nella tabella "Fornitori" viene cercato nel campo "Codice" il valore immesso nella casella di testo. Se viene trovato, nella "CasellaTestoNonAssociata" viene scritto il valore del relativo campo "Descrizione", altrimenti la casella di testo non associata viene lasciata vuota.

David

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-07-18T12:56:03+00:00

    Nz l'ho inserito nell'eventualità che il codice che scrivi nel controllo Fornitore non sia presente nella tabella Fornitori (cosa che a quanto tu dici in effetti non dovrebbe accadere):

    <citazione>

    "Ho un'altra tabella chiamata "Fornitori" ed all'interno ha due campi: "Codice" (i valori immessi in questo campo sono gli stessi del campo "Fornitore" della tabella "NC"

    </citazione>

    Ad ogni modo, al seguente link trovi il db su cui ho fatto il test e su cui non riesco a ripetere l'errore che descrivi. TestDlookUp.accdb

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-07-18T11:26:46+00:00

    Grazie David. Hai perfettamente capito come dovrebbe funzionare il codice e la tua spiegazione è esatta.

    Il codice che hai appena indicato differisce dal primo trasmesso in quanto hai aggiunto la funzione "Nz" prima di inserire la funzione DLookup ed hai aggiunto le parentesi. Modificando il mio codice di conseguenza adesso non mi da nessun errore se non immetto valori nel campo fornitore mentre mi restituisce l'errore di run-time 3075 se immetto un valore (che il valore sia presente o meno nella tabella "Fornitori" il risultato non cambia): "errore di sintassi (operatore mancante) nell'espressione della query "Descrizione"". Grazie mille per la collaborazione.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-07-18T09:14:50+00:00

    Buongiorno David e molte grazie. Ho provato ad utilizzare il codice ma purtroppo non funziona. Per prima cosa chiedo gentilmente se l'underscore nel campo criteria dell'espressione è necessario in quanto se non racchiudo tutto il campo criteria tra parentesi quadre il codice così scritto presenta un errore di sintassi proprio relativo all'underscore. Ho provato ad eseguire il codice senza l'underscore o racchiudendo tutta la parte criteria tra parentesi quadre (e mantenendo l'underscore) ma mi compare l'errore di run-time 2465 (impossibile trovare il campo "|1" a cui viene fatto riferimento nell'espressione). Ho verificato attentamente che i nomi dei campi ed i riferimenti nell'espressione fossero corretti. Grazie per la gentile risposta. Cordiali saluti.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-07-17T13:26:36+00:00

    Ciao Ab387,

    nell'evento dopo aggiornamento del controllo Fornitore prova ad inserire:


    If Not Len(Me!Fornitore.Value & "") = 0 Then

        Me!CasellaTestoNonAssociata.Value = DlookUp("Descrizione","Fornitori","Codice = '" _

            & Me!Fornitore.Value & "'"

    Else

        Me!CasellaTestoNonAssociata.Value = vbNullString

    End If


    David

    La risposta è stata utile?

    0 commenti Nessun commento