|
VBAを長くやられている方は、既にお分かりだと思います。
私は、VBAをやり始めて一年ぐらいは理由が分かりませんでした。
Range("A1") Is Range("A1") の結果が Falseになるのは、
Range("A1")という記述が実行される度に
Rangeオブジェクトは別インスタンスが作られているからなのです。
よって、
Range("A1") Is Range("A1")
は別々のオブジェクトを比較しているので Falseとなるのです。
Range("a1").value=Range("a1").value
この記述では、ふたつのインスタンスが作成され、Valueプロパティの
代入処理を行っています。
With Range("A1")
.Value=.Value
End With
尚、このように記述すると、インスタンスはひとつしか作成されていません。
Shapeでの結果も同じ理由です。
実際に見えているセル = Rangeオブジェクト
実際に見えている図形 = Shapeオブジェクト
というように錯覚しがちですが(私は、最初はそう解釈していました)、
Rangeオブジェクトは、セルを操作する窓口であり、
Shapeオブジェクトは、図形を操作する窓口にすぎません。
ひとつのセル、ひとつの図形に対して、
複数の窓口を存在させる事が出来るのです。
同じ図形を見ていても、違う窓口(オブジェクト)であれば、
Is演算子は、Falseを返します。
|
|