207 votes

Quelle est la différence entre les deux .texte, .valeur, et .valeur2?

Je ne suis pas à demander de l'aide avec n'importe quel script, mais ma question est pour avoir des précisions. Dernièrement, j'ai fait beaucoup de script VB dans Excel, donc je suis vraiment se référant à Exceller dans cette question. Quelle est la différence entre les deux .texte, .valeur, et .valeur2? Comme quand dois-je utiliser de la cible.le texte, à la cible.valeur, et de la cible.valeur2? Je n'ai jamais utilisé de la valeur2 option mais souhaitez tout de même de savoir à quoi il sert.

Parfois, si j'utilise .le texte qu'il me donne une erreur et j'ai besoin d'utiliser .valeur quand je suis seule vérification ou de manipuler du texte dans une cellule. Alors, parfois, quand je pense que je devrais utiliser .valeur, j'obtiens une erreur et j'ai besoin d'utiliser .texte. Habituellement, il accepte ou non d'un problème, mais parfois, il peut faire une différence. Je sais, il y a une certaine logique à cela, mais je n'arrive pas à le comprendre.

J'ai aussi découvert que si vous venez de le laisser comme cible sans préciser .texte ou .valeur il va d'abord travailler, mais alors quelque chose que quelqu'un ne causera éventuellement le script à l'erreur, il est donc toujours préférable d'utiliser un .quelque chose sur elle. Je suppose que ce que je demande, c'est si quelqu'un peut me donner une sorte de ligne directrice, la règle de pouce, à la façon de bien les utiliser et quand il doit être utilisé.

Merci pour l'explication, les gars. J'ai en quelque sorte de mieux les comprendre. Ils sont tous les deux de bonnes explications. Ci-dessous, un petit exemple d'une partie de mon code qui ne fonctionne pas. J'ai pensé qu'il devrait être la cible.le texte, mais il aurait erreur alors quand j'ai utilisé de la cible.valeur cela a fonctionné.

If LCase(Target.Value) = LCase("HLO") And Target.Column = 15 Then
    Target.Value = "Higher Level Outage"
End If

Je suis encore un peu confus parce que quand je pense de la valeur ou de valeur2, surtout après vos réponses que vous avez fournies, je pense qu'ils devraient seulement être utilisés pour les numéros. Cependant, dans mon exemple je parle strictement du texte, ce qui est beaucoup de ce que mon script se réfère à (texte dans les cellules, plus que des chiffres).

271voto

Charles Williams Points 9147

.Text vous donne une chaîne de caractères représentant ce qui est affiché sur l'écran de la cellule. À l'aide de .Le texte est généralement une mauvaise idée parce que vous pourriez obtenir de l' ####

.Value2 vous donne la valeur sous-jacente de la cellule (qui peut être vide, une chaîne, une erreur, un nombre ou une valeur booléenne)

.Value vous donne le même que .Valeur2, sauf si la cellule est formatée comme la monnaie ou de la date à laquelle il vous donne un VBA monnaie (qui peut tronquer décimale) ou la date.

À l'aide de .Valeur ou .Le texte est généralement une mauvaise idée parce que vous ne pouvez pas obtenir la valeur réelle de la cellule, et ils sont plus lents que les .Valeur2

Pour une analyse plus poussée, voir mon Texte vs Valeur vs Valeur2

59voto

KazJaw Points 11365

À l'exception des premier formulaire de réponse Bethsabée, à l'exception de MSDN de l'information pour:

.Valeur
.Valeur2
.Texte

vous pourriez analyser ces tableaux pour une meilleure compréhension des différences entre analysé les propriétés.

enter image description here

26voto

Bathsheba Points 23209

target.Value va vous donner un Variant type

target.Value2 va vous donner un Variant type de bien, mais un Date est contrainte à un Double

target.Text des tentatives de forcer à un String et échouera si le sous-jacent Variant n'est pas coercable à un String type

La chose la plus sûre à faire est de quelque chose comme

Dim v As Variant
v = target.Value 'but if you don't want to handle date types use Value2

Et de vérifier le type de la variante VBA.VarType(v) avant de tenter une explicite de la coercition.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X