bean_bandit ha scritto:
Ho una function che vorrei applicare a piu controlli e quindi renderla "universale". I controlli si trovano in varie sottomaschere, ma non capisco come recuperare il nome della sottomaschera:
Dim strFormName As String
Dim strSubFormName As String
Dim strControlName As String
Dim nome_form As String
strFormName = Forms(0).Name 'maschera principale
strSubFormName =? 'sottomaschera attiva
strControlName = Screen.ActiveControl.Name 'nome controllo
nome_form = "[" & strFormName & "]" & "![" & strSubFormName & "]" & "![" & strControlName & "]"
valore = Forms! & nome_form & .Value
strSubFormName =?
inoltre ho un altro problema Forms! & nome_form & .Value mi da errore, ho provato varie sintassi ma nulla, è possibile utilizzare una variabile come parte del percorso?
Devi chiarire meglio, il contesto in questo caso è fondamentale come sempre...!!!
Usare Forms(0)... è da evitare nel modo più assoluto, se hai 2 Form aperte è finita...!
Se la Funzione di cui parli viene chiamata dalla SubForm è semplice usare il riferimento a CodeContextObjecty.
Scrivi questa function Public in un Modulo per capire
Public Function Prova()
MsgBox "Nome Form Chiamante = " & CodeContextObject.Name
End iF
Se è come ho ipotizzato, otterrai il Nome della SubForm... ovviamente se l'oggetto associato al CodeContextObject è una SubForm con Parent ricavi l'oggetto Form...
Public Function Prova()
MsgBox "Nome Form Chiamante = " & CodeContextObject.Name
MsgBox "Nome FormParent = " & CodeContextObject.Parent.Name
End iF
Oltrtetutto devi fare attenzione perchè in gerarchia, la SubForm è un Controllo e quando scrivi
Forms!NomeForm!NomeSubForm
Quel NomeSubForm è in realtà il Container dell'Oggetto SubForm e non l'oggetto stesso... e questo non lo riesci a trovare se non ciclando i controlli della Form cercando quello che ha ControlType=acFrom e il cui Nome è quello della SubForm.
Credo non ti sia chiarissimo quello che ti ho spiegato... mi rendo conto che non è immediato... ma è esattamente come ho scritto.