Excelの選択したセルを取得するには

解決


70644  2006-02-24 00:08:16  No: 130365

Excelの選択したセルの行数を取得するにはどうしたらよいでしょうか。

VBAでは Selection.Row で取得できたと思いますが、
VB.NETでは Selectionオブジェクトに Rowプロパティがありません。

宜しくお願いします。


特攻隊長まるるう  2006-02-24 01:24:54  No: 130366

まず、Selection はプロパティです。
オブジェクトを返すプロパティです。
返されるオブジェクトは1つではありません。
>Selectionオブジェクトに Rowプロパティがありません。
そのような解釈がいつでも成り立つようなプロパティでは
ありません。対象により用意されているプロパティは変化します。

[VB.NET]から Excel のオブジェクトへ出した命令は、実際は[Excel VBA]と
同じ処理が呼び出されて実行されます。
>VBAでは Selection.Row で取得できたと思いますが、
>VB.NETでは Selectionオブジェクトに Rowプロパティがありません。
それはあり得ません。

ただし、Selection が目的の Excel のオブジェクトを正しく
指しているならという前提条件付で。Rowプロパティを持たない
オブジェクトが対象であれば当然 Rowプロパティは存在しません。


魔界の仮面弁士  2006-02-24 01:26:44  No: 130367

> VBAでは Selection.Row で取得できたと思いますが、
Selectionプロパティから返されるオブジェクトは、その時々で変わります。
(だからこそ、戻り値が Variant/Object 型になっているわけで)

そして、Rangeオブジェクトを返す場合には、Row プロパティが参照できます。

> VB.NETでは Selectionオブジェクトに Rowプロパティがありません。
この部分に関しては、実行時バインディングを用いて下さい。
(本来は、Range 型にキャストできればよいのですが…)

つまり、Option Strict Off モードにしておいて、
  Dim O As Object = 〜.Selection
  Dim C As Integer = O.Row
のようなコードになりますね。

どうしても Option Strict On モードにしておかなければならないなら、
  Dim O As Object = 〜.Selection
  Dim C As Integer = CInt(CallByName(O, "Row", CallType.Get))
のように書く事もできます。
# CallByName を使った書き方は、VBA でも使えますね。


70644  2006-02-24 01:47:40  No: 130368

魔界の仮面弁士さん、特攻隊長まるるうさんご回答ありがとうございます。

CInt(CallByName(〜.Selection, "Row", CallType.Get))
上記の方法でうまくいきました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加