Finestra combobox.

domenica 25 agosto 2013 - 14.48

Ms402 Profilo | Newbie

Salve, ho bisogno di una funzione particolare ma credo che non esista. Mi spiego. Ho una casella combinata (in una maschera di access 2007) dove all'interno ci sono dei report (es. report1, report2) che una volta selezionati mi apre tramite l'evento "dopo aggiornamento" con una macro. Fin qui tutto bene, ma se ci aggiungo ai report una maschera (es. report1, report2 e maschera1) come dovrei modificare la macro per fargli aprire anche la maschera? Spero di essere stato chiaro.
PS La macro (convertita in modulo vba) è così composta:
Option Compare Database

'------------------------------------------------------------
' Dettagli_Dati_Accesso
'
'------------------------------------------------------------
Function Dettagli_Dati_Accesso()
On Error GoTo Dettagli_Dati_Accesso_Err

If (IsNull(Screen.ActiveControl)) Then
Exit Function
End If
TempVars.Add "ReportToOpen", "[Screen].[ActiveControl]"
If (CurrentProject.IsTrusted) Then
Screen.ActiveControl = Null
End If
DoCmd.OpenReport TempVars!ReportToOpen, acViewReport, "", "", acNormal
TempVars.Remove "ReportToOpen"


Dettagli_Dati_Accesso_Exit:
Exit Function

Dettagli_Dati_Accesso_Err:
MsgBox Error$
Resume Dettagli_Dati_Accesso_Exit

End Function

renarig Profilo | Expert

Non è una soluzione che mi piace ma .....
Potresti gestire l'errore 2103 che si verifica quando tenti di aprire un report inesistente.
invece delle macro usa questo codice
Function Dettagli_Dati_Accesso() On Error GoTo Errx If (IsNull(Screen.ActiveControl)) Then Exit Function End If TempVars.Add "ApReMa", Screen.ActiveControl.Value If (CurrentProject.IsTrusted) Then Screen.ActiveControl = Null End If On Error GoTo Xxxx DoCmd.OpenReport TempVars!ApReMa, acViewReport, "", "", acNormal GoTo Exxit Xxxx: If Err.Number = 2103 Then ' Errore 2103 = Non trova il Report DoCmd.OpenForm TempVars!ApReMa, acNormal Else On Error GoTo Errx GoTo Errx End If Exxit: TempVars.Remove "ApReMa" Exit Function Errx: MsgBox ("Errore n° " & Err.Number & vbNewLine & Err.Description) Resume Exxit End Function

Una soluzione piu bella sarebbe invece:
Nella casella combinata ci metti 2 colonne
- Il nome del report/Maschera
- una "R" se Report una "M" se maschera
Poi dirotti il tuo codice con una "if" alla apertura del
--- Report se trova la "R"
--- Maschera se trova la "M"


Facci sapere
.



Ms402 Profilo | Newbie

Grazie, il codice funziona. Io avevo risolto creando un report che in evento apertura mi apriva la maschera (metodo agricolo). La casella combinata la carico tramite MSysObjects aggiungendo nei criteri il nome dei report e delle maschere da aprire. Ho provato ad aggiungere una colonna dove inserisco M o R ma non sono riuscito a creare la if. Grazie.

renarig Profilo | Expert

>Ho provato ad aggiungere una colonna dove inserisco M o R ma non
>sono riuscito a creare la if
No con la tabella MSysObjects non puoi aggiungere nessuna colonna in quanto è "SolaLettura"
Pero in quella tabella puoi leggere oltre al campo "Name" anche il campo "Type"
i cui valori sono -32764 per i Report e -32768 per le Maschere
( Questo non è documentato da Microsoft, Tuttavia è "Universalmente" valido )

Quindi se ti crei una CasellaCombinata a 3 colonne
Coulumn(0) ----- Name
Coulumn(1) ----- Un campo calcolato che dice all'utente se Report o Maschera
Coulumn(2) ----- Type
Allora puoi nel codice separare i 2 Type ( -32764 e -32768 ) e aprirti quello che vuoi

Guarda la Demo

.

renarig Profilo | Expert

>La casella combinata la carico tramite MSysObjects aggiungendo
>nei criteri il nome dei report e delle maschere da aprire.

Sto rileggendo adesso e noto un dettaglio che mi era sfuggito.

Perchè usi MSysObjects e metti ( necessariamente manualmente ) nei criteri il nome degli oggetti da aprire. ??

sarebbe molto più immediato scrivere nell'elenco valori della casella combinata ( sempre manualmente ) i nomi degli oggetti da aprire

.

Ms402 Profilo | Newbie

Già corretto, avevo postato una prova che avevo fatto. Grazie al file che hai postato ed al tuo aiuto ora funziona tutto perfettamente. Grazie ancora.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5