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).
- LCase(La Cible.Valeur) échoue si la Cible.La valeur n'est pas coercable à une chaîne de caractères depuis LCase nécessite une chaîne de caractères à un argument. Vous devriez vérifier le VarType d'abord en tant que par ma réponse. Notez également que vous pourriez utiliser UCase au lieu et à la comparer directement à "HLO": pas beaucoup de point dans l'exploitation sur un littéral.
- Merci pour les informations sur VarType. Aussi loin que l'LCase ou UCase pour cela, il ne serait vraiment pas d'importance que celle que j'ai utilisé. Certaines personnes type comme hlo et autres type comme HLO. De ce que j'ai vu qu'il était le plus faible de cas a été utilisée plus souvent.
Vous devez vous connecter pour publier un commentaire.
.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, le numéro (double) ou booléen).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 VBA date.À l'aide .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
1420470000000000
. Je veux obtenir comme une chaîne de caractères. À l'aide de.Value
etValue2
à la fois le retour de la suite pour moi:1.42047E+15
. Ce que je veux en fait, c'est la pleine valeur sous forme de chaîne c'est à dire1420470000000000
. Je suis en utilisant.Formula
pour le moment, mais serait désireux de savoir d'une solution plus appropriée?.Text
est qu'il retourne soitString
si leRange
contient les mêmes textes (même si des valeurs différentes), ouNull
autrementDate
dans unDouble
(à l'aide de.Value2
) lorsque ce que vous avez besoin est unDate
. Ne devrait pas.Value
être préférée à.Value2
lorsque vous êtes à la recherche à unDate
valeur? L'article lié n'est pas très claire non plus. Les performances, car pas de conversion? Bien sûr, mais ensuite, si votre code VBA est de travailler avec unDate
, alors vous allez perdre de bord de l'exécution de la conversion vous-même, implicitement ou explicitement,... (contexte - n'hésitez pas à poids en)Format$(Range.Value2, Range.NumberFormat)
.Range.Text
est un en lecture seule de la propriété, compte tenu de l'OP s note "Sometimes if I use .text it gives me an error and I need to use .value when I am ... manipulating the text within a cell
"À l'exception des premier formulaire de réponse Bethsabée, à l'exception de MSDN de l'information pour:
.Valeur
.Valeur2
.Texte
vous permettre d'analyser ces tableaux pour une meilleure compréhension des différences entre analysé les propriétés.
.Value
comme le standard de la propriété tout le temps - pour le texte et les nombres. Utilisation.Value2
quand vous pensez de la date et de certains numéros. Et l'utilisation.Text
toujours si vous avez besoin de garder la mise en forme de tout ce que vous avez dans la cellule et la plage. Donc, votre question exemple si elle est correcte!target.Value
vous donnera unVariant
typetarget.Value2
vous donnera unVariant
type de bien, mais unDate
est contrainte à unDouble
target.Text
tente de contraindre à unString
et échouera si le sous-jacentVariant
n'est pas coercable à unString
typeLa chose la plus sûre à faire est de quelque chose comme
Et vérifier le type de la variante en utilisant
VBA.VarType(v)
avant de tenter une coercition explicite.Concernant les conventions en C#. Disons que vous êtes en train de lire une cellule qui contient une date, par exemple 2014-10-22.
Lors de l'utilisation:
.Text
, vous obtiendrez la mise en forme de la représentation de la date, comme on le voit dans le classeur à l'écran:2014-10-22. Ce type de propriété est toujours
string
, mais ne peut toujours retourner un résultat satisfaisant..Value
, le compilateur tente de convertir la date enDateTime
objet: {2014-10-22 00:00:00} Plus probablement utiles lors de la lecture des dates..Value2
, vous donne la vraie, la valeur sous-jacente de la cellule. Dans le cas pour les dates, c'est une série de date: 41934. Cette propriété peut avoir un type différent selon le contenu de la cellule. Pour la date feuilletons cependant, le type estdouble
.De sorte que vous pouvez récupérer et de stocker la valeur d'une cellule dans
dynamic
,var
ouobject
mais notez que la valeur sera toujours avoir une sorte de innées type que vous aurez à agir..Le texte est la mise en forme des cellules de la valeur affichée; .Valeur est la valeur de la cellule peut-être augmentée avec la date de monnaie ou des indicateurs .Valeur2 est le cru valeur sous-jacente dépouillé de tout superflu et de l'information.
Si vous êtes le traitement de la valeur de la cellule puis la lecture de la crue .Valeur2 est légèrement plus rapide que .Valeur ou .Texte. Si vous êtes à la localisation des erreurs, puis .Le texte sera de retour quelque chose comme
#N/A
comme du texte, et peut être comparée à une chaîne tout en .Valeur et .Valeur2 va s'étouffer en comparant leur valeur retournée est une chaîne. Si vous avez quelques personnalisé cellule de mise en forme appliquée à vos données ensuite .Le texte peut être le meilleur choix lors de la construction d'un rapport.Par curiosité, je voulais voir comment
Value
effectué contreValue2
. Après environ 12 essais des processus similaires, je ne pouvais pas voir de différences significatives dans la vitesse, donc je le recommande toujours à l'aide deValue
. J'ai utilisé le code ci-dessous pour exécuter quelques tests avec différentes gammes.Si quelqu'un voit quelque chose de contraire au sujet du rendement, s'il vous plaît poster.