タイトル : Re^3: VB2008で、単一のExcel.Shapesオブジェクトの取得方法 投稿日 : 2009/09/07(Mon) 15:36 投稿者 : 魔界の仮面弁士
# 開放か解放かという話は、とりあえず横に置いておくとして: > Dim iShapeMax As Object = myShapes.Count Shapes.Count は、System.Int32 (Integer)を返します。 Integer は COM オブジェクトでは無い為、解放云々とは無関係ですよ。 そもそも「Integer 型を格納した Object」は、Marshal.ReleaseComObject に 渡すことができません。COM オブジェクト以外を渡すとエラーになりますから。 ループで処理する場合には、 > For i = 1 To iShapeMax > myShape = myShapes.Item(i) : MRComObject(myShape) '取得した myShape を破棄する > Next のように実装します。 > 魔界の仮面弁士様から教えていただいた >>一度 Object 型に受けてから解放という手もありますが、 >>あまり良い方法でもないですね。 > をヒントにやってみました。 そういう意味ではありません。 そこで受け取ろうとしていたオブジェクトは、列挙用の COM オブジェクト (System.Runtime.InteropServices.ComTypes.IEnumVARIANT に相当)の事です。 .NET で管理されるオブジェクト(今回は Integer 型)を受け取っても、 Excel 解放の手助けとはなりません。 |