Newsgroup: it.comp.appl.access
Titolo: proprietà o metodo non supportati dall'oggetto

ciao a tutti
 
con questa function volevo non solo
bloccare i controlli della Form ma evitare aggiunte
e modifiche nelle varie subform, ma ho l'errore:
proprietà o metodo non supportati dall'oggetto
dove sbaglio?
 
Public Function bloccaon(mask)
Dim valore
Dim ctl As Object
valore = -1  
For Each ctl In Forms(mask).Controls
  Forms(mask).Form(ctl.Name).Locked = valore  
  If ctl.ControlType = acSubform Then
    Debug.Print mask
    Debug.Print 
ctl.name
 
    Forms(mask).Form(ctl.Name).AllowAdditions = False
 
  End If
Next ctl
 
grazie


ci sono controlli, di comune utilizzo, che NON hanno la proprietà "bloccato" (Locked)--> button, label, (linea)
 
SE dipende da questo prova a mettere la gestione errore
e l'istruzione Resume Next nelle righe di controllo errore
 
 

Il giorno domenica 31 marzo 2019 10:58:02 UTC+2, Franco dellavalle ha scritto:

If ctl.ControlType = acForm _
  And ctl.Name <> "Interruttore1" Then
    Forms(mask).Form(ctl.Name).Locked = valore
    Forms(mask).Form(ctl.Name).AllowAdditions = False
End If
 
cosi non ho l'errore, ma non blocca nulla


mah,
ANCHE 
ctl.name
 è MOLTO sospetto ...
 
comunque, ALL'INTERNO di una form,
queste righe ottengono l'effetto 
 
Private Sub Comando13_Click()' all'interno di una form
Dim valore
Dim ctl As Object
On Error GoTo erore
valore = -1
For Each ctl In Me.Controls
  ctl.Locked = valore
Next ctl
 
Exit Sub
 
erore:
If Err.Number = 438 Then Resume Next
End Sub
 
lascio NON COMPLETATO
nè per l'esame di subForm
nè per lo scopo di generalizzare
 


grazie Giorgio


mask cos'è? Una variabile oggetto o il nome della maschera?
Nel primo caso devi dichiararne la proprietà Forms(
mask.name
), nel 
secondo caso devi mettere le virgolette Forms("mask").
 
Inoltre hai provato a scrivere
Forms(...)!Form(ctl.Name).Locked = valore con il punto esclamativo al 
posto del punto?
A questo proprosito prova a dare un occhiata sul sito di Karl quando si 
usano i punti e quando i punti esclamativi!
 
Un mio puntiglio personale: perché dichiari <valore> come variant? Non è 
sufficiente un -> Dim valore as boolean <- meno vorace di memoria?
 
 
 


ciao mantro
ho modificato la function presa da sito comune

cut
 
Public Function bloccaon(mask)
Dim ctl As Object
 
' blocca ogni sottomaschera ed ogni casella di testo
For Each ctl In Forms(mask).Controls
If ctl.ControlType = acSubform Or _
  ctl.ControlType = acComboBox Or _
  ctl.ControlType = acTextBox Then
  Forms(mask).Form(ctl.Name).Locked = True
End If
Set ctl = Nothing
Next ctl
End Function
 
cosi va bene in parte,
perchè non riesco ad applicare
.AllowAdditions alle subform


Scritta così è veramente scritta male...!
 
Personalmente la scriverei così:
 
Public Function fblocca(mask As Access.Form, Optional Value As Boolean = True)
    Dim ctl As Object
    ' blocca ogni sottomaschera ed ogni casella di testo
    For Each ctl In Forms(mask).Controls
        Select Case ctl.ControlType
            Case acComboBox, acTextBox, acListBox, acSubform
                ctl.Locked = Value
        End If
    Next ctl
 End Function
 
La chiami con:
Call fblocca(Me, True/False) ' ion realtà True è DEFAULT OPTIONAL
Call fblocca(Forms!NomeForm, True/False)
 
Vengono passati gli OGGETTI e non i Nomi.
 
@Alex

 .AllowAdditions alle subform
 
Come no... si riesce se lo applichi all'Oggetto FORM e non al Container....!
 
Public Function fblocca(mask As Access.Form, Optional Value As Boolean = True)
    Dim ctl As Object
    ' blocca ogni sottomaschera ed ogni casella di testo
    For Each ctl In Forms(mask).Controls
        Select Case ctl.ControlType
            Case acComboBox, acTextBox, acListBox
                ctl.Locked = Value
            Case acSubform
                ctl.Locked = Value
                ctl.Form.AllowAddition=Not Value



grazie Alex


ho errore su questo punto
ctl.Form.AllowAddition = Not Value
errore definito dall'applicazione o dall'oggetto

 errore definito dall'applicazione o dall'oggetto
 
Manca la S [AllowAdditions]... scritta a braccio.
 
Queste cose Franco devi riuscire ad arrivarci da solo.
 
@Alex


vero
1000 grazie

Capito nulla... la funzione così come è scritta è indipendente dalla posizione... devi passare un Oggetto Form e funziona sia esso una Form o SubForm...
Basta scrivere la sintassi giusta dell'oggetto ...nella chiamata.
 
Posta quello che scriveresti tu.
 
@Alex


intendevo cosi;
è corretto dichiarare la variabile ctl come Object
Dim ctl As Object
For Each ctl In mask.Controls
With ctl
  If .Tag = "block" Then
    .Locked = Value
  End If
  Select Case .Name
    Case "SmOrd"
      .Locked = Value
    Case "SmDettagli", "SmNote"
      .Form.AllowDeletions = Not Value
      .Form.AllowAdditions = Not Value
  End Select
End With
Next ctl


In questo caso pur se non errato, è come usare sempre VARIANT tanto funziona...!
Tu iteri tra i controlli devi dichiararla come Oggetto di tipo...!
 
Dim ctl As Access.Control
 
Il codice scritto sopra poi è nuovamente MOLTO errato... per tutte le cose di cui già si è parlato.
 
@Alex


Ho fatto cosi, ma non credo abbia trovato l'errore che dici
 
Dim ctl As Access.Control
For Each ctl In mask.Controls
With ctl
  If .Tag = "block" Then
    .Locked = Value
  End If
  Select Case .Name


Ma tutto quello che ti ha suggerito Giorgio a chi lo ha detto... al tabacchino sotto casa..?
 
Franco sembra tu non sia in grado di collegare 2 ragionamenti fatti nello stesso post...
 
@Alex 


cmq per tua info non ho alcun errore
per come ho fatto
e cmq grazie di tutto

Mah... cosa vuoi ti dica, nonostante i suggerimenti Non ne hai.tenito conto, quindi direi che va bene cosi, inutile insistere.
 
@Alex

 @Alex
 
scusa ha1 scritto...
 
"Il codice scritto sopra poi è nuovamente MOLTO errato"
solo per la mancanza della gesione errori?