N' .Valeur = .Valeur de loi similaire à Évaluer() fonction en VBA?

Considérons l'extrait suivant. Il écrit la même formule à deux cellules A1 et A2

Sub Main()
    With Range("A1")
        .Formula = "=1+1"
    End With

    With Range("A2")
        .Formula = "=1+1"
        .Value = .Value
    End With
End Sub

La deuxième with bloc utilise .Value = .Value qui calcule/exécute la formule donc la formule disparaît de la barre de formule. Reportez-vous à masquage des formules à partir de la barre de formule pour un soutien de référence.

N' .Valeur = .Valeur de loi similaire à Évaluer() fonction en VBA?

Maintenant, ajoutez un autre bloc

With Range("A3")
     .Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)

Vous ajouter une formule à la cellule A3 alors que de nouvelles cellules de la formule est Evaluated() dans une autre cellule A4. Les résultats comme indiqué

N' .Valeur = .Valeur de loi similaire à Évaluer() fonction en VBA?

Je pense que le ci-dessus montre que .Value = .Value et Evaluate() faire la même chose.

Cependant, Le code ci-dessous tire de la valeur d'un classeur fermé à l'aide de deux approches mentionnées. J'ai créé un classeur book9.xlsm pour cet exemple, avec un hello mettre dans la cellule A1. book9.xlsm est celui que je vais tirer les A1's la valeur de. Considérez le code

Sub PullValue()
    With Range("A1")
        .Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
    End With

    With Range("A2")
        .Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
        .Value = .Value
    End With

    Range("A3").Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
    Range("A4") = Evaluate(Range("A3").Formula)
End Sub

La première with bloc met une formule dans la cellule du A1 valeur à partir d'une book9.xlsm. Il est exécuté par conséquent tiré valeur est hello mais la barre de formule, c'est la .Formula qui est C:\....

La deuxième with bloc utilise la .Value = .Value comme démontré ci-dessus pour l'évaluation de la formule et de cacher la formule en la remplaçant par la suite.

Range("A3") est la même que la première with bloc.

Et maintenant (A4) je suis en suivant le même principe que le premier exemple(premier extrait de cette question) à Evaluate() la formule toutefois, Il ne fonctionne pas cette fois.

Consultez toutes les cellules activées valeurs et de la barre de formule pour chacun

N' .Valeur = .Valeur de loi similaire à Évaluer() fonction en VBA?

Alors maintenant, je ne peux pas dire que .Value = .Value est égal à Evaluate().

Les remarques de Evalutate() dire qu'il peut être utilisé avec des formules. Mais dans l'exemple que j'ai montré ça ne fonctionne pas.

N' .Valeur = .Valeur de loi similaire à Évaluer() fonction en VBA?

Sont les formules utilisées en tant que paramètres dans Evaluate() restreint? J'ai toujours pensé que l'évaluation est très puissant, mais il s'avère que .Value = .Value est en fait encore plus puissant. Même si elles sont très semblables, ils sont un peu différentes ( mais je pense qu'il pourrait être de ma faute, la formule que j'ai choisi pour cet exemple peut être restreinte ou limitée ). Je pense que j'ai montré ce qui fait d'eux deux semblables et différents à la fois. C'est toujours comme 50%/50% et je ne peux pas dire exactement si ce sont les mêmes ou pas. Ce serait génial si quelqu'un était en mesure d'expliquer ce qui manque ici.

  • J'ai roulé en arrière votre modifier. Merci de ne pas changer radicalement le sens de postes, surtout si vous êtes juste de "deviner" ce que la question est. Voir cette méta de discussion pour plus de détails.
  • Evaluate() échoue lorsque la cellule référencée est dans un classeur fermé j'ai peur. Si vous ouvrez le référencés livre ensuite, il sera bien à nouveau. C'est la façon d'Évaluer la fonction des œuvres, il ne peut pas lire de livre fermé.
InformationsquelleAutor | 2013-07-19