Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
Forse la prima if dovrebbe essere per = e non <> .
Mimmo
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Ciao a tutti, Ho sviluppato per diletto una piccola applicazione per calcolare il prezzo “chiavi in mano” di una casa. In sostanza vorrei che un controllo non associato nella maschera “S_Immobili” chiamato “CoeffCatCalc” assuma valori diversi a seconda del valore del campo “ID_ClasseCat”, che è invece una casella combinata (legata al rispettivo campo della tabella “Immobili”).Tutto ciò serve a calcolare la benedetta imposta di registro sugli immobili, secondo la bizantina legge italiana. A seconda della classe catastale si determina il Coefficiente catastale che moltiplicato per la Rendita dà il Valore catastale, su cui si calcola l’Imposta di registro. Per far assumere a CoeffCatCalc il valore giusto a seconda dello “ID_ClasseCat” ho pensato di costruire una funzione IIf che contempli tutte le cervellotiche casistiche, e che quindi sia nidificata.
Qui sotto le condizioni una per una:
Ho provato a nidificare in diversi modi, questo è l’ultimo: =IIf([ID_ClasseCat]<>4 or [ID_ClasseCat]<>15 or [ID_ClasseCat]<>17);"115,50";IIf([ID_ClasseCat]=12 or [ID_ClasseCat]=10);"63";IIf([ID_ClasseCat]=13 or [ID_ClasseCat]=18 or[ID_ClasseCat]=19 or[ID_ClasseCat]=20 or[ID_ClasseCat]=21 or[ID_ClasseCat]=22 or[ID_ClasseCat]=23 or[ID_ClasseCat]=24);"176,40";IIf([ID_ClasseCat]=14 or [ID_ClasseCat]=11);"42,84";IIf([ID_ClasseCat]=25 or [ID_ClasseCat]=26 or [ID_ClasseCat]=27 or [ID_ClasseCat]=28 or [ID_ClasseCat]=29 or [ID_ClasseCat]=30);"126";"da definire")
Access continua a darmi errore essenzialmente di tipo “numero errato di argomenti specificati in una funzione nell’espressione immessa”. Sbaglio sicuramente qualcosa nella sintassi della nidificazione. Mi sto anche convincendo che forse la scelta di usare una IIf nidificata a questo livello non è la scelta giusta.Qui il DB: https://1drv.ms/u/s!AtZa5okJIOVOh6FedbiGQNeB0A4tzw?e=lj9LEt Cosa mi consigliate?Grazie molte per l’attenzione
Alberto
Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
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.
Risposta accettata dall'autore della domanda
Forse la prima if dovrebbe essere per = e non <> .
Mimmo
Grazie molte ancora una volta, Mimmo.
Hai ragione, una funzione è sicuramente molto più efficiente. Non ci avevo pensato xchè non ho gran dimestichezza col VB.
Cosa intendi quando dici che la funzione IIf è errata?
Alberto
Ciao, ho creato una funzione decodificando il tuo ultimo tentativo.
Crea un modulo e incolla il seguente codice
Option Compare Database
Option Explicit
Function CoeffCatCalc(Id_ClasseCat)
If [Id\_ClasseCat] <> 4 Or \_
[Id\_ClasseCat] <> 15 Or \_
[Id\_ClasseCat] <> 17 Then
CoeffCatCalc = "115,50"
Exit Function
End If
If [Id\_ClasseCat] = 12 Or \_
[Id\_ClasseCat] = 10 Then
CoeffCatCalc = "63"
Exit Function
End If
If [Id\_ClasseCat] = 13 Or \_
[Id\_ClasseCat] = 18 Or \_
[Id\_ClasseCat] = 19 Or \_
[Id\_ClasseCat] = 20 Or \_
[Id\_ClasseCat] = 21 Or \_
[Id\_ClasseCat] = 22 Or \_
[Id\_ClasseCat] = 23 Or \_
[Id\_ClasseCat] = 24 Then
CoeffCatCalc = "176,40"
Exit Function
End If
If [Id\_ClasseCat] = 14 Or \_
[Id\_ClasseCat] = 11 Then
CoeffCatCalc = "42,84"
Exit Function
End If
If [Id\_ClasseCat] = 25 Or \_
[Id\_ClasseCat] = 26 Or \_
[Id\_ClasseCat] = 27 Or \_
[Id\_ClasseCat] = 28 Or \_
[Id\_ClasseCat] = 29 Or \_
[Id\_ClasseCat] = 30 Then
CoeffCatCalc = "126"
Exit Function
End If
CoeffCatCalc = "da definire"
End Function
Nella maschera, nell'origine del controllo con nome CoeffCatCalc imposta
=CoeffCatCalc([Id_ClasseCat])
Ti faccio notare che mi sembra errata la tua IIF origine infatti il primo blocco della funzione che ho ricavato non mi convince:
If [Id\_ClasseCat] <> 4 Or \_
[Id\_ClasseCat] <> 15 Or \_
[Id\_ClasseCat] <> 17 Then
CoeffCatCalc = "115,50"
Exit Function
End If
Ciao Mimmo
Guardando il tuo Db noto che utilizzi solo macro, purtroppo con quelle vai poco lontano.
Provo a buttarti giù una funzione VBA.
Mimmo
Ciao,
ammesso che tu ci riesca, immagina di doverla modificare in futuro!!!
Io penso che ti convenga creare una funzione.
Mimmo