Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
ciao Cristian_boy,
si molto più chiaro ora, devo dire che con un pizzico di intuizione in più avrei potuto capirlo...ma....vabbè....
procederei in questo modo...
modulo pubblico :
Option Compare Database
Option Explicit
Public myControlSource As String
Public myControlName As String
modulo di classe clsControls ( chiamalo proprio clsControls)
Option Compare Database
Option Explicit
Private WithEvents mytxt As Access.TextBox
Public Sub getTxtBox(ByVal txt As Access.TextBox)
Set mytxt = txt
mytxt.OnGotFocus = "[event procedure]"
End Sub
Private Sub mytxt_GotFocus()
myControlSource = mytxt.ControlSource
myControlName = mytxt.Name
End Sub
evento load della form Clienti1:
Private Sub Form_Load()
Dim cls As clsControls
Dim Ctl As Control
Set col = New VBA.Collection
For Each Ctl In Me.Controls
If TypeName(Ctl) = "textBox" Then
Set cls = New clsControls
cls.getTxtBox Ctl
col.Add cls, Ctl.Name
End If
Next
Set Ctl = Nothing
Set cls = Nothing
End Sub
ed in testa al modulo di classe della form clienti1 dichiari :
Option Compare Database
Option Explicit
Private WithEvents fmrCustomer As Form_trova
Private col As VBA.Collection
evento su scaricamento della form clienti1 :
Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
DoCmd.Close objecttype:=acForm, _
objectname:="trova"
For i = col.Count To 1 Step -1
col.Remove i
Next
Set col = Nothing
End Sub
ed infine evento di classe della form client1 da modificare come segue :
Private Sub fmrCustomer_findCustomer(strCliente As String)
Dim fld As DAO.Field
Dim strFld As String
With Me.RecordsetClone
.FindFirst myControlSource & "=""" & strCliente & """"
If .NoMatch Then
VBA.MsgBox "Nessuna corrispondenza individuata", vbCritical, "Warning!"
Else
Me.Controls(myControlName).SetFocus
Me.Bookmark = .Bookmark
DoCmd.Close objecttype:=acForm, objectname:="trova"
End If
End With
End Sub
sostanzialmente, aprendo la form client1 e la form trova, scrivi quello che devi cercare nella textBox della form trova, ti sposti sul controllo ( non sul campo, controlli nelle forms e reports, campi in tabelle e queries), in quel mentre memorizzi il controlSource del controllo indicato e se trovi la corrispondenza clicclando sul command button preposto, la form si chiude,ti sposti il focus su quel controllo e sincronizzi il bookmark.
Se non trovi la corrispondenza, ottieni un messaggio di avviso.
La classe clsControls si occupa di gestire l'evento su attivazione (onGotFocus) ereditandone l'evento.
Ovviamente può essere esteso ad altri tipi di controllo intervenendo opportunamente.
HTH.
Ciao, Sandro.