VBAを学習していて、正確にはRange()
がVBAのために取り込むものは本当に混乱しています。私は、OOPとJava/Pythonのような言語をかなり堅固に把握していますが、VBAはここでループのためにちょっと投げています。ActiveCellを使用したVBAでのセルと範囲の関係
私は
Set MyRange = Range(ActiveCell, Range(ActiveCell.End(xlDown)))
を使用しようとすると、私は正解が
Set MyRange = Range(ActiveCell,ActiveCell.End(xlDown))
であることを知っている。しかし、私はこのような場合は理由を理解しようとしているエラーが発生します。エラーは具体的にはRange(ActiveCell.End(xlDown))
から発生しています。私は.End()
がRange
オブジェクトをMSDN documentationから返すことを知っています。私は
MsgBox (TypeName(ActiveCell))
を書くとき
しかし、私はActiveCell
がRange
オブジェクトであることを知らされています。 Range("A1")
は完璧に(もちろん)うまく動作しますが、Range(ActiveCell)
はエラーをスローします。したがって、Range()
はRange
のオブジェクトでは発生しません。
しかし、"A1"
は明らかにString
です。 Range()
をVBAエディタに入力すると、Range()
が引数のパラメータとしてCell
を受け入れることがわかります。だからVBA
のCell
とRange
の関係はどうなっていますか? Range
はCell
から継承していますか?私はなぜRange()
が他のRange
オブジェクトを受け入れ、またString
を受け入れるのか混乱していますか?
Range()
がパラメータとしてRange
オブジェクトを受け入れない場合、なぜこのコードが機能しますか?
Range("A2", Range("A2").End(xlDown).End(xlToRight))
ここRange
オブジェクトを返す.End()
はありませんか? ActiveCell.End(xlDown)
が既に範囲を返し
これはあなたのための良い読書になります:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-object-excel –