Newsgroup: it.comp.appl.access
Titolo: Chiamare funzine su altra maschera

Ciao a tutti, come posso fare per chiamare una funzione che si trova nel
codice della maschera A se mi trovo sulla maschera B? Mi sembrava di aver
trovato la soluzione mettendo un pulsante nascosto nella maschera A che su
attivato lanciava la funzione e nella maschera B chiamavo l'evento
Pulsante_gotfocus. Purtroppo adesso non funziona ("Impossibile spostare lo
stato attivo del contyrollo...") e non capisco perchč???
Grazie
Stefano

 ha scritto nel messaggio
news:hdilb.57365$e6.20...@twister2.libero.it...

Sposta la tua funzione su un modulo e la richiami
da qualsiasi punto della tua applicazione.
SunRex

 ha scritto nel messaggio
news:hdilb.57365$e6.20...@twister2.libero.it...

    Ciao, Stefano.
    La funzione dovra' essere dichiarata come pubblica:
        ' Codice nella Maschera A
        '
        Public Function TuaFunzione()
            ' ...
        End Function
e potrai chiamarla cosi':
        ' Codice nella maschera B
        ' (ma anche in qualsiasi altro modulo di codice
        ' dell'applicazione)
        '
        A.TuaFunzione
a condizione, ovviamente, che la maschera A sia caricata. Un piccolo esempio
abbastanza completo:
' Form_A
'
Option Compare Database
Option Explicit
Public Function FaiQualcosa( _
) As Long
  On Error GoTo ErrorHandler
  ' Simulazione errore:
  '
  'Debug.Print 1 / 0
  MsgBox "Fatto!", vbInformation Or vbOKOnly, "FaiQualcosa"
  Exit Function
ErrorHandler:
  FaiQualcosa = Err.Number
End Function
' Form_B
'
Option Compare Database
Option Explicit
Private Sub pdcFaiQualcosa_Click()
  On Error GoTo ErrorHandler
  Const c_strNomeMascheraA As String = "A"
  Dim objAcApp    As Access.Application
  Dim objAcFormA  As Access.AccessObject
  Dim lngResult   As Long
  Set objAcApp = Access.Application
  Set objAcFormA = objAcApp.CurrentProject.AllForms(c_strNomeMascheraA)
  If ( _
    objAcFormA.IsLoaded = True _
  ) Then
    lngResult = Form_A.FaiQualcosa
  Else
    Select Case _
        MsgBox( _
              "La maschera " _
            & "'" & c_strNomeMascheraA & "'" _
            & " non e' aperta." & vbNewLine _
            & "Vuoi aprirla?" _
            , vbExclamation Or vbYesNoCancel _
            , "ATTENZIONE!")
    Case vbYes
      objAcApp.DoCmd.OpenForm c_strNomeMascheraA
      lngResult = Form_A.FaiQualcosa
    Case vbNo
      lngResult = 1 + VBA.vbObjectError + 512
    Case Else
      lngResult = 2 + VBA.vbObjectError + 512
    End Select
  End If
  If (lngResult = 0) Then
    ' Tutto Ok!
  Else
    Err.Raise lngResult
  End If
ExitProcedure:
  Set objAcFormA = Nothing
  Set objAcApp = Nothing
  Exit Sub
ErrorHandler:
  With Err
    Select Case .Number
    Case 1 + VBA.vbObjectError + 512
      MsgBox "Impossibile eseguire la funzione richiesta."
    Case 2 + VBA.vbObjectError + 512
      MsgBox "Hai rinunciato ad eseguire la funzione richiesta."
    Case Else
      MsgBox .Description, vbExclamation Or vbOKOnly, "ERR#" & CStr(.Number)
    End Select
  End With
  Resume ExitProcedure
End Sub
-- 
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

 --------
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------