La comparaison de Chaînes en VBA
J'ai une base en programmation et ont été auto-suffisante pour de nombreuses années, mais ce problème je n'arrive pas à résoudre. J'ai un programme en VBA et j'ai besoin de comparer deux chaînes de caractères. J'ai essayé d'utiliser les méthodes suivantes pour comparer mes chaînes de caractères ci-dessous, mais en vain:
//Assume Cells(1, 1).Value = "Cat"
Dim A As String, B As String
A="Cat"
B=Cell(1, 1).Value
If A=B Then...
If A Like B Then...
If StrCmp(A=B, 1)=0 Then...
I've even tried inputting the Strings straight into the code to see if it would work:
If "Cat" = "Cat" Then...
If "Cat" Like "Cat" Then...
If StrCmp("Cat" = "Cat", 1) Then...
VBA pour une raison quelconque ne reconnaît pas ces chaînes d'égal à égal. Lorsque vous allez à travers Débogueur il montre que StrComp retourne 1. Faire de mon chaînes différentes Char longueurs? Merci pour toute aide.
Que pensez vous de voir si vous ne
Oui et VBA encore renvoie toujours un 1 avec StrComp()
Je pense que vous utilisez
Suis-je à l'aide de ce mal? Et je ne sais pas continuer à essayer Si "D555177" Comme "D555177" alors... mais im pas obtenir quoi que ce soit. Est-ce parce que j'ai entiers dans la chaîne? Il ne devrait pas droit?
voir ma réponse ci-dessous, vous êtes certainement à l'aide de ce mal, en comparant une valeur booléenne pour un entier.
B = "@@@" + Cell(1, 1).Value + "@@@"
? Tout d'espaces supplémentaires? Essayé d'emballage B
avec Trim()
?Oui et VBA encore renvoie toujours un 1 avec StrComp()
Je pense que vous utilisez
StrComp
de manière incorrecte. Mais les autres fonctions de travail (et de fait, travail quand je les tester).Suis-je à l'aide de ce mal? Et je ne sais pas continuer à essayer Si "D555177" Comme "D555177" alors... mais im pas obtenir quoi que ce soit. Est-ce parce que j'ai entiers dans la chaîne? Il ne devrait pas droit?
voir ma réponse ci-dessous, vous êtes certainement à l'aide de ce mal, en comparant une valeur booléenne pour un entier.
OriginalL'auteur user3768212 | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Poste en tant que réponse, car elle ne rentre pas dans les commentaires:
J'ai du mal à croire que quelque chose comme:
Ne serait pas afficher
True
sur votre machine. Merci de vérifier.Cependant, j'observe que vous êtes le plus certainement à l'aide de
StrComp
fonctionner de façon incorrecte.L'utilisation appropriée est
StrComp(string, anotherstring, [comparison type optional])
Lorsque vous ne
StrComp(A=B, 1)
vous êtes essentiellement en lui demandant de comparer si un booléen (A=B
sera soit True ou False) est équivalent à l'entier1
. Il n'est pas, et ne le sera jamais.Lorsque j'exécute le code suivant, tous les quatre boîtes de message de confirmer que chaque instruction est évaluée à True.
Mise à jour à partir des commentaires
Je ne vois rien de bizarre qui se passe si j'utilise un tableau, juste pour info. Exemple de données utilisés dans le tableau:
Routine modifiée pour utiliser un tableau:
Ce que je voudrais vérifier est de savoir comment vous êtes l'instanciation de la matrice. Gamme de tableaux (comme pour mon exemple) sont la base 1. Si il a assigné une autre manière, il est plus probable de la base de 0, donc assurez-vous que vous êtes en comparant le bon index de tableau.
Oui StrComp n'est pas censé comparer comme ça. Merci.
voir quelques plus d'info ajoutée, ci-dessus. Peut-être que vous obtient plus près à la résolution de problème (peut-être) avec votre tableau.
Merci beaucoup pour toute l'aide David
OriginalL'auteur David Zemens