2010-01-19 6 views
8

Existe-t-il un moyen de déterminer le type d'objet lors de la transmission d'une référence à une fonction? J'utilise une fonction d'autorisations de sécurité, qui détermine si l'utilisateur a l'autorisation d'afficher/modifier le formulaire qui lui est transmis par référence. J'aimerais étendre cela pour inclure également des rapports.MS Access: Déterminer le type d'objet

Pour conserver la fonction générique, je voudrais passer un arbitre soit pour un formulaire ou un rapport comme un objet, par exemple: function gfSecurity_Permission(obj as Object)

Cependant, je dois déterminer la type de l'objet dans la fonction.

Est-ce que quelqu'un connaît un moyen de faire cela?

MTIA

Répondre

11

Jetez un oeil à

typeOf and typeName

variables d'objet générique (qui est, variables que vous déclarez comme objet) peut contenir des objets de toute classe. Lorsque vous utilisez des variables de type Object, , vous devrez peut-être effectuer différentes actions en fonction de la classe de l'objet ; Par exemple, certains objets peuvent ne pas prendre en charge une propriété ou une méthode particulière. Visual Basic fournit deux moyens de déterminer quel type d'objet est stocké dans une variable d'objet: la fonction TypeName et l'opérateur TypeOf ... Is.

TypeName et TypeOf ... Est-
La fonction TypeName renvoie une chaîne et est le meilleur choix lorsque vous besoin de stocker ou d'afficher le nom de la classe d'un objet, comme indiqué dans le fragment de code suivant:

Dim Ctrl As Control = New TextBox 
MsgBox(TypeName(Ctrl)) 

le TypeOf ... est-opérateur est le meilleur choix pour tester le type d'un objet, car il est beaucoup plus rapide qu'une comparaison de chaîne équivalente en utilisant TypeName. Le fragment de code suivant utilise TypeOf ... Est-ce dans un If ... Then ... Else déclaration:

If TypeOf Ctrl Is Button Then 
    MsgBox("The control is a button.") 
End If 
+0

Merci beaucoup! – maxhugen

+2

Impossible de trouver une référence à un mot clé TypeOf dans Access VBA. Suspect c'est .NET seulement. [Ici] (http://office.microsoft.com/en-us/access-help/typename-function-HA001228928.aspx?CTT=5&origin=HA010131676) est la référence MSDN à la fonction TypeName dans Access VBA. En passant, cela peut être pratique: une [liste de toutes les fonctions Access VBA par catégorie] (http://office.microsoft.com/fr-fr/access-help/access-functions-by-category-HA010131676.aspx). –

+1

@ Simon, c'est un opérateur et est présent dans - je suppose - toutes les versions de VBA .. http://msdn.microsoft.com/en-us/library/0ec5kw18%28v=VS.80%29.aspx –

6

Simplest façon de déterminer le type d'accès en matière d'accès est de faire une recherche d'objets dans le Accéder aux tables système.

serait ici la recherche:

DLookup("Type","MSysObjects","NAME = '" & strObject & "'") 

strObject est le nom de l'objet dans Access

Le résultat est l'un des numéro ci-dessous ou NULL si l'objet n'existe pas dans Access

1 = Access Table 
4 = OBDB-Linked Table/View 
5 = Access Query 
6 = Attached (Linked) File (such as Excel, another Access Table or query, text file, etc.) 
-32768 = Access Form 
-32764 = Access Report 
-32761 = Access Module 

donc, le DLookup fournirait "-32768" pour un formulaire ou "-32764" pour un rapport Hope that helps

+0

Cette méthode ne fonctionne qu'avec les objets Access, elle ne retournera pas les types de contrôle. TypeName renvoie les types d'objet Access et les types de contrôle. – DataWriter