Estrarre il nome di un controllo conoscendone il TabIndex

Anonimo
2017-04-12T11:05:31+00:00

Buongiorno a tutti,

ho la necessità tramite codice di estrarre il nome del controllo di una maschera solamente conoscendone il suo TabIndex. Sarebbe possibile farlo e, se si, in che modo.

Grazie,

Maurix

Microsoft 365 e Office | Access | Per la casa | Windows

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.

0 commenti Nessun commento

5 risposte

Ordina per: Più utili
  1. Anonimo
    2017-04-12T13:57:19+00:00

    Se hai fatto il semplice copia/incolla della funzione è normale che tu non veda nulla.

    La funzione era solo a titolo di esempio e di conseguenza stampa il nome e il tabindex del controllo nella finestra immediata VBA.

    Per usarla all'interno del codice che hai mostrato prova a utilizzare questa versione modificata


    Private Function fControlFromTabIndex(ByVal iTabIndex As Integer) As String

        Dim ctrl As Control

        For Each ctrl In Me.Controls

            On Error Resume Next

            If ctrl.TabIndex = iTabIndex Then

                If Err.Number = 0 Then

                    'Debug.Print ctrl.TabIndex; ctrl.Name;

                    fControlFromTabIndex = ctrl.Name

                    Exit For

                Else

                    Err.Clear

                End If

            End If

        Next

    End Function


    David

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-04-12T13:17:12+00:00

    Ciao David,

    dopo aver inserito la funzione privata all'interno della form ho richiamato la funzione in questo modo:

    Private Sub Ricambio_01_Click()

    Dim CurrentTab As Integer

    Dim CurrentControl As String

    CurrentTab = Me.ActiveControl.TabIndex

    CurrentTab = CurrentTab + 1

    CurrentControl = fControlFromTabIndex(CurrentTab)

    End Sub

    All'avvio del codice (click sul controllo Ricambio_01) non viene visualizzato nessun testo, né del TabIndex né del Nome del controllo desiderato. Ho verificato e il valore numerico del CurrentTab è associato ad un controllo. Sbaglio in qualcosa? Magari nella modalità con cui richiamo la funzione?

    Grazie,

    Maurizio

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-04-12T12:26:55+00:00

    L'errore nasce dal fatto che l'indice del controllo non è uguale all'indice di tabulazione: come puoi leggere in questo articolo Controls.Item Property (Access) index è "An expression that specifies the position of a member of the collection referred to by the expression argument........."

    Una possibile soluzione: puoi creare una funzione (privata se la metti all'interno della stessa form) a cui passare il tabindex cercato. La funzione effettua un loop sui controlli della maschera per testarne la proprietà tabindex (per chi la possiede). Trovato il valore corrispondente a quello cercato ti restituisce il nome del controllo associato:


    Private Function fControlFromTabIndex(ByVal iTabIndex As Integer) As String

        Dim ctrl As Control

        For Each ctrl In Me.Controls

            On Error Resume Next

            If ctrl.TabIndex = iTabIndex Then

                Debug.Print ctrl.TabIndex; ctrl.Name;

            End If

        Next

    End Function


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-04-12T11:52:29+00:00

    Ciao Mimmo,

    ha una maschera continua ma in visualizzazione singola.

    Il codice produce un output ma il nome del controllo che mi restituisce non corrisponde con l'Index inserito.

    Inoltre, inserendo alcuni valori dell'Index, il codice mi restituisce il nome di etichette che però nella mia maschera non hanno un indice di tabulazione.

    Quale pensi possa essere l'errore?

    Grazie,

    Maurix

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-04-12T11:25:05+00:00

    Ciao,

    hai provato con:  me.corpo.Controls.Item (tuoIndex).name

    (ovviamente su maschera continua)

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento