Newsgroup: it.comp.appl.access
Titolo: Richiamare una sottomaschera da VBA

Ciao a tutti! Ho una maschera con all'interno una sottomaschera. Ho creato
dei pulsanti per aggiungere, modificare o eliminare dei record. Per
necessità però non ho potuto usare la creazione guidata perchè devo prima
richiamare una funzione. Il problema è che quando premo questi pulsanti mi
dice che è impossibile trovare la maschera indicata dal codice (-2450).
Dipende dal fatto che la sottomaschera fa parte di una maschera e il codice
non la distingue come maschera?
Questo è il codice del pulsante:
Private Sub btn_nuovo_Click()
    Abilita Me.Name
    DoCmd.GoToRecord acActiveDataObject, , acNewRec
End Sub
e questa è la funzione
Function Abilita(NomeForm As String)
On Error GoTo gesterr
    Dim frm As Form
    Dim CTL As Control
    Set frm = Forms(NomeForm)
    frm.AllowAdditions = True
    frm.NavigationButtons = False
    For Each CTL In frm
        Select Case CTL.ControlType
        Case Is = acCommandButton
            If CTL.Tag = "ABILITA" Then
                CTL.Enabled = True
                CTL.SetFocus
            End If
        End Select
    Next
    For Each CTL In frm
        Select Case CTL.ControlType
        Case Is = acCommandButton
            If CTL.Tag = "DISABILITA" Then
                CTL.Enabled = False
            End If
        Case Is = acCheckBox
            If CTL.Tag = "CAMPO" Then
                CTL.Locked = False
            End If
        Case Is = acTextBox
            If CTL.Tag = "CAMPO" Then
                CTL.Locked = False
                CTL.BackColor = 16777215
            End If
        Case Is = acComboBox
            If CTL.Tag = "CAMPO" Then
                CTL.Locked = False
                CTL.BackColor = 16777215
            End If
        Case Is = acSubform
            If CTL.Tag = "CAMPO" Then
                If (CTL.Name = "SM_DOCUMENTI_OPERATIVI") _
                    Or (CTL.Name = "SM_DOCUMENTI_QUALITA") _
                    Or (CTL.Name = "SM_DOCUMENTI_REALTIME") Then
                    CTL.Locked = True
                Else
                    CTL.Locked = False
                End If
                CTL.Form.DatasheetFontHeight = 8
                CTL.Form.DatasheetBackColor = 16777215
                CTL.Form.AllowAdditions = True
                CTL.Form.AllowDeletions = True
            End If
            If CTL.Tag = "CAMPO1" Then
                CTL.Locked = False
                CTL.Form.DatasheetFontHeight = 8
                CTL.Form.DatasheetBackColor = 16777215
                CTL.Form.AllowAdditions = False
                CTL.Form.AllowDeletions = False
            End If
        End Select
    Next
    Set CTL = Nothing
    Set frm = Nothing
Uscita:
    Exit Function
gesterr:
    MsgBox Err.Description & " - " & Err.Number
    Resume Uscita
End Function
Su altre maschere funziona. Ma le uso su maschere e non su sottomaschere.
Qui mi dà questo problema.
Si può risolvere?
Grazie
Ciao
Stefano

             End If
Sinceramente però a me sfugge il senso della cosa.
Spero oltretutto che tu abbia usato un controllo da mantenere sempre
Attivo altrimenti
rischi di andare in errore per il tentativo si disabilitare il
controllo con il Focus... e quì non vedo nulla che lo evita se non la
prima parte che peraltro è discutibile...!
Questa funzione in ogni caso va solo una volta e poi non serve a nulla,
sei certo che
valga la pena usarla...., l'hia scritta tu oppure no...?
La domanda non è per indagare, ma per capire se l'hai scritta sapendo
a cosa serviva
o se è un collage malriuscito..., serve per capire come aiutarti.
@Alex

 ha scritto nel messaggio
news:1153848511.2...@b28g2000cwb.googlegroups.com...
r4gtl ha scritto:






@Alex
Effettivamente le cose stanno così: stiamo cercando di certificarci e quello
che ci segue ha chiamato un tizio che ha una software house per imbastire
un'applicazione in access che ci aiuti a gestire tutto quello che servirà
per certificarci. Ha costruito tante maschere e ci ha messo su tutte 5-6
pulsanti per le operazioni sui record (nuovo, salva, annulla, chiudi...). Il
codice è sempre lo stesso e la funzione, inserita in un modulo, viene
richiamata ogni volta che si preme il pulsante. Io sto cercando di
completare l'applicazione (adesso siamo a cavallo) e devo costruire altre
tabelle, maschere, query e report sulla base di quello che mi serve. Solo
che sto andando molto per tentativi e sto imparando a memoria i messaggi del
NG che tra l'altro, finora mi sono stati molto utili.
Quindi no. Non sapevo quello che facevo. Almeno non del tutto.
Ciao
Stefano

 Stefano
In questo caso forse la cosa migliore sarebbe quella di rivolgersi
direttamente al
consulente.
Il codice postato gestisce già gli oggetti Form e SubForm in modo
dedicato, e per
adattarlo alle tue esigenze dovresti proprio avere le idee chiare di
come usarlo e
di come rimanere allineato con lo standard dell'applicazione.
L'unica cosa che posso dirti è di prestare attenzione alla proprietà
TAG dell'oggetto
Cornice della SubForm che viene usata proprio come discriminante:
"CAMPO"
o 
"CAMPO1"
Ciao
@Alex

 ha scritto nel messaggio
news:1153896256.5...@b28g2000cwb.googlegroups.com...
r4gtl ha scritto:




"CAMPO"
o
"CAMPO1"
Ciao
@Alex
Posso evitare di richiamare la funzione e metterci dei pulsanti configurati
tramite la creazione guidata? Perchè ho provato ma ad esempio il pulsante
"Nuovo" ma il cursore non si posiziona sull'ultimo record. La mia
sottomaschera he il layout "Tabulare". Mi andrebbe meglio il layout "Foglio
Dati" ma non riesco a mettere i pulsanti nella sottomaschera. Cioè se metto
i pulsanti (anche nell'intestazione) quando faccio partire la maschera, i pu
lsanti scompaiono. Dipende dal layout?
Grazie
Stefano