max.riservo ha scritto:
Antonior76 ha scritto:
Function Macro_Utente()
If (Forms![Database]!CasellaCombinata47 = "013") Then
DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*013"")", acNormal
DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='013'")
DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='013'")
DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='013'")
ElseIf (Forms![Database]!CasellaCombinata47 = "021") Then
DoCmd.OpenReport "Report", acViewReport, "", "([utenze].[Padiglione/Utente] Like ""*021"")", acNormal
DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto]='021'")
DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto]='021'")
DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto]='021'")
End If
End Function
Function Macro_Utente()
Dim sReparto as String
Dim sFilter as String
sReparto = Forms![Database]!CasellaCombinata47
sFilter = "[utenze].[Padiglione/Utente] Like '*" & sReparto & "'"
DoCmd.OpenReport "Report", acViewReport, "", sFilter, acNormal
DoCmd.SetProperty "CasellaTesto1", , DLookup("[Reparto]", "Database", "[Reparto] = '" & sReparto & "'")
DoCmd.SetProperty "CasellaTesto2", , DLookup("[Denominazione Reparto]", "Database", "[Reparto] = '" & sReparto & "'")
DoCmd.SetProperty "CasellaTesto3", , DLookup("[Generalità Incaricato]", "Database", "[Reparto] = '" & sReparto & "'")
End Function
Se il codice delle 115+1 IF è tutto uguale (ovvero cambia SOLO il reparto) direi che potresti limitari a quanto proposto sopra (salvo eventuali errori di sintassi) .....
Sinceramente NON capisco a cosa serva il docmd.setproperty (e non so neanche dove risiedano i campi che vuoi impostare).
Giusto per fare un piccolo passo in avanti ed evitare confusione / fraintendimenti : non chiamare una funzione Macro_Utente() non lo è. E' una funzione di VBA ....
Assegna dei nomi sensati a controlli, oggetti : CasellaTesto1, 2, 3, DATABASE (per una tabella / query POI) certo NON lo sono.
Dlookup serve primariamente per recuperare il valore di un campo da una tabella/query : nel tuo caso (ne fai 3 sulla stessa tabella) è certamente meglio usare un recordset ... ma penso che stiamo andando troppo oltre il tuo attuale livello di conoscenza del prodotto.
Grazie al tuo codice mi sono risparmiato 116 IF con tutti i rischi di errori di sintassi.
L'unica cosa che ho dovuto modificare parte della formula in:
DoCmd.SetProperty "CasellaTesto1", acPropertyValue, DLookup.............
DoCmd.SetProperty "CasellaTesto2", acPropertyValue, DLookup.............
DoCmd.SetProperty "CasellaTesto3", acPropertyValue, DLookup.............