エクセル関数の入力

解決


himizu  2012-05-17 11:48:54  No: 147594  IP: 192.*.*.*

vb.netで以下処理をエクセルに実行した際に、
正常に入力されません。
リンク先が空白なら0ではなく空白表示したいのですが。。


■コード
oSheet.Cells(7, 20) = "=IF('1'!T7="","",'1'!T7)"


■エクセル入力結果
=IF('1'!T7=",",'1'!T7)

編集 削除
魔界の仮面弁士  2012-05-17 12:12:25  No: 147595  IP: 192.*.*.*

(1) 数式を指定する場合は、.Formura 系プロパティに代入する必要があります。

(2) 文字列中に " を指定する場合は、それを連記する必要があります。
  たとえば、TextBox に「引用符(")を代入」と表示させる場合には、
    TextBox1.Text = "引用符("")を代入"
  という構文になります。

(3) Cells は、引数を受け取らないプロパティであることに注意してください。
  提示されたコードだと、実際には oSheet.Cells._Default(7, 20) 相当に
  解釈されます。Cells から返されるオブジェクトを変数に受けておき、
  使用後に ReleaseComObject した方が良いでしょう。
  http://hanatyan.sakura.ne.jp/dotnet/Excelflm.htm

編集 削除
himizu  2012-05-17 13:24:50  No: 147596  IP: 192.*.*.*

魔界の仮面弁士さん
いつも有難う御座います。

ご教示頂いた3つの内容を対応すると
以下のような感じになりますでしょうか。

Dim xlCells As Excel.Range = oSheet.Cells
Dim xlRange As Excel.Range

With oSheet
     xlRange = DirectCast(xlCells(7, 18), Excel.Range)
     xlRange.Formula = "=IF('1'!R7="""","""",'1'!R7)"
     MRComObject(xlRange1)

     xlRange = DirectCast(xlCells(7, 20), Excel.Range)
     xlRange.Formula = "=IF('1'!R8="""","""",'1'!R8)"
     MRComObject(xlRange1)

    ……


     MRComObject(xlCells)
End With

編集 削除
とくま  2012-05-17 13:56:33  No: 147597  IP: 192.*.*.*

>     xlRange = DirectCast(xlCells(7, 18), Excel.Range)
> …
>     MRComObject(xlRange1)
使用している変数と解放している変数が食い違っている以外は
いいと思います。
もしこの間違っているコードが実際のコードのコピペなら、
変数の宣言の仕方(グローバル変数の多用)や、似たような
変数名の使用について注意すべきかと思います。

編集 削除
とくま  2012-05-17 13:59:24  No: 147598  IP: 192.*.*.*

・・・あ、あと
> With oSheet
要らないでしょう?利用していませんよね?

編集 削除
himizu  2012-05-17 14:02:10  No: 147599  IP: 192.*.*.*

ご指摘有難う御座います。

 MRComObject(xlRange1)は、上記書き込みをするときに
ご教示頂いたサイトからのコピーしたものでした。
まだ実際のコードには反映してませんが、気を付けるようにします。

>魔界の仮面弁士さん
>とくまさん

ありがとうございました。
解決済みとさせて頂きます。

編集 削除