La difficulté avec InputBoxes
Je suis actuellement en train de travailler avec InputBoxes dans MS Access VBA. Je suis l'examen de la validation et de la manipulation de la façon dont l'utilisateur interagit avec l'InputBox à travers appuyant sur le bouton OK ou Annuler.
Corrigez-moi si je me trompe, mais InputBoxes pouvez retourner n'importe quel type de données et, par défaut, retourner une chaîne de caractères? Par exemple:
Dim userInputValue As String
'Text to display, Title, Default Value
userInputValue = InputBox("Please enter a #", "Determine Limit", 10000)
If userInputValue = "" Then
MsgBox ("You pressed the cancel button...")
End If
Si l'utilisateur appuie sur le bouton Annuler cette fonctionnera correctement.
Mais quand j'échange ce pour une valeur entière comme suit:
Dim userInputValue As Integer
'Text to display, Title, Default Value
userInputValue = InputBox("Please enter a #", "Determine Limit", 10000)
If userInputValue = 0 Then
MsgBox ("You pressed the cancel button...")
End If
Je reçois un Type Mismatch: Runtime Error '13'
Pourquoi est-ce? Quand je déboguer le code et regardez ce qu'il est retourné, je trouve que la userInputValue
est en fait 0, qui est ce que je vais vérifier. Donc, le problème est que la méthode InputBox est en fait de retourner une chaîne de caractères?
OriginalL'auteur Katana24 | 2013-04-17
Vous devez vous connecter pour publier un commentaire.
En cas de doute, consultez un exemple de l'aide de VBA 😉
InputBox()
retourne une Chaîne de caractèresVous pouvez essayer ce pour les Entiers
OriginalL'auteur Siddharth Rout
Ici est un moyen de rattraper la plupart des résultats de l'interaction avec la fenêtre de dialogue;
StrPtr()
en VBA?StrPtr (comme VarPtr, VarPtrArray, VarPtrStringArray, et ObjPtr) est un sans-papiers fonction est utilisée pour obtenir la mémoire sous-jacente adresse des variables vb.mvps.org/tips/varptr.asp
Bien sûr, de la partie de la base de langue & des œuvres pour la détection d'une chaîne thats jamais été attribué à
Je pense que j'ai juste ajouté ça à obtenir le "remplir votre profil" badge bronze 🙂
lol@Alex: Pour les futurs visiteurs: VarPtr, StrPtr et ObjPtr sont encore présents dans VBA dans Off2007 et Off2010. Pour les pointeurs 64 bits dans la version 64 bits d'Office 2010, vous pouvez trouver une documentaiton ici dans msdn: msdn.microsoft.com/en-us/library/ee691831.aspx
(Sorry Alex for hijacking this comment)
OriginalL'auteur Alex K.
InputBox
renvoie une chaîne quel que soit le numéro de l'utilisateur. Si vous cliquez sur Annuler, il renvoie une chaîne vide.Essayez ceci dans la fenêtre exécution.
Pour le test dans votre code, vérifier si l'équivalent numérique de
userInputValue
est égal à zéro.Remarque que
InputBox
ne permet pas de distinguer si l'utilisateur a cliqué sur Annuler ou supprimés de la valeur de départ (10000) et cliqué sur OK. De toute façon,InputBox
retourne une chaîne vide (""). EtVal("")
également retourne zéro. Si cela va être un problème, le remplacer par un formulaire personnalisé pour recueillir l'entrée de l'utilisateur ... ce qui n'est pas aussi limité queInputBox
.Il semble que nous avons soumis nos réponses en une fraction de seconde, mais j'ai pensé que le vôtre a obtenu en premier, donc supprimé le mien. Mais ensuite, j'ai décidé, nous avons pris les approches légèrement différentes, donc peut-être que les deux sont utiles assez pour survivre. 🙂
OriginalL'auteur HansUp
Note: La règle suivante s'applique seulement pour Excel. L'Application.InputBox fonction n'est pas disponible en Accès:
Application.InputBox retourne "False" si l'utilisateur clique sur Annuler.
Je suis désolé, mais vous avez tort. Au moins essayer quelque chose avant de vous downvote. Vous verrez que j'ai raison. C'est Application.Inputbox et ça fonctionne de cette façon, si la variable est déclarée comme une Chaîne de caractères. Il fonctionne différemment si la variable est déclarée en tant que Variante.
Il n'y a pas de l'Application.InputBox dans l'Accès donc, je suppose que tu voulais dire VBA.InputBox ...
OK, my bad, c'est dans Excel, mais ce n'est pas de l'Accès, pour quelque raison.
Cette même question pour Excel est marqué comme un doublon et redirigé sur cette question, mais les réponses sont différentes pour Access et Excel.
OriginalL'auteur swmcdonnell
Plutôt que d'obtenir un numéro de retour de InputString, définir la valeur par défaut de la chaîne de "___________". Ensuite, je peux tester si quelque chose était entré et la touche Annuler retourne une chaîne vide.
J'ai aussi ajouter un test de valeur "Allow_Empty_String" (Vrai/Faux) parce que parfois j'ai envie d'une chaîne vide en arrière.
La "Flag_Msg_Err" doit être réinitialisé à False car "Msg_Err" il définit à true pour attraper des appels à partir de boucles.
La routine doit répondre à l'une des 3 façons:
1. Si le bouton "Annuler" est pressé, le programme se termine.
2. Si le bouton "OK" est pressé,
SI ALLOW_EMPTY_STRING ALORS
un message est donné d'entrée et recommence
D'AUTRE
une chaîne vide est renvoyée
FIN DE SI
3. Cette chaîne a été saisi., puis TRIM(STRING) est retourné.
Code:
Fonction Input_String(Prog, Message, En Option Allow_Empty_String = False)
'Retourne une Chaîne de caractères ou le mot "Cancal'".
'2/28/19 Créé. WML
End Function ' Input_String`
OriginalL'auteur Lingo