Recuperare il nome di una sottomaschera

di il
2 risposte

Recuperare il nome di una sottomaschera

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?

2 Risposte

  • Re: Recuperare il nome di una sottomaschera

    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.
  • Re: Recuperare il nome di una sottomaschera

    In effetti no, non credo di aver capito, cioè ho scritto:
    
    For Each Form_Corrente In CurrentProject.AllForms	
    	Debug.Print Form_Corrente.Name
    	if Form_Corrente.ControlType = acsubform then
    		XXXX
    	end if
    Next Form_Corrente
    
    ma a parte non funzionare anche se lo facesse non capisco poi come inserirlo nella stringa come percorso della form...
Devi accedere o registrarti per scrivere nel forum
2 risposte