- - PR -
Visual Basicからエクセルの操作
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-17 14:26
環境は Win2000
VS.NET 2003 Office 2000 です。 私は今、エクセルでVBAを使った処理をVBからの操作におきかえる作業をしています。 xlRange("A1:N2").Select() With xlApp.Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 1 End With このような処理が元のソースに多々でてくるのですが xlEdgeTop xlContinuous xlThin がエラーでひっかかってしまいます。 今までの環境では問題なく動いています。 MicroSoft Excel **.* Object Library の参照はしてあります。 問題にお気づきの方、もしくは詳しい解説サイトをご存知の方がいらっしゃいましたら 教えていただきたいです。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-05-17 14:34
エラー(例外?)の内容を詳しく教えてください | ||||||||||||
|
投稿日時: 2006-05-17 14:35
コンパイル エラーですよね。 エラーの内容を書かれていないので推測になりますが、そのメンバまでのパスがないからでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-17 14:45
そもそも、このコードには COM オブジェクトへの暗黙の参照がありますね。 参照カウントをデクリメントするタイミングを逃していることになります。 必ず変数へ参照を取り、解放を行うようにしてください。参考になれば幸いです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-17 15:11
お返事ありがとうございます。
エラーの内容ですが、 VisualStudioでの編集時に波線がひかれます。 ビルドすると宣言されていません。 となります。 | ||||||||||||
|
投稿日時: 2006-05-17 15:13
であれば、答えはもう出ていますのでご確認ください。 # それよりも、COM 参照の解放の方が心配ではありますが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-17 15:31
参考にしているサイトから得た情報で
Public Sub MRComObject(ByRef objCom As Object) Try If Not objCom Is Nothing AndAlso System.Runtime.InteropServices. _ Marshal.IsComObject(objCom) Then Dim I As Integer Do I = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) Loop Until I <= 0 End If Catch Finally objCom = Nothing End Try End Sub 最後に MRComObject(xlSheet) 'xlSheet の解放 MRComObject(xlSheets) 'xlSheets の解放 xlBook.Close(False) 'xlBook を閉じる MRComObject(xlBook) 'xlBook の解放 MRComObject(xlBooks) 'xlBooks の解放 xlApp.Quit() 'Excelを閉じる MRComObject(xlApp) 'xlApp を解放 の記述はしています。 >>であれば、答えはもう出ていますのでご確認ください。 って事はVBAでは宣言がいらなくてもVBでは宣言する必要があるのでしょうか? もしそうなら何型で宣言すればいいのかご存知でしたら教えていただけますか? たびたび、申し訳ありません。 | ||||||||||||
|
投稿日時: 2006-05-17 15:45
はい、もちろんこの固まりは、Finally 句で書かれていますよね。 であるならば、これについては問題ないと思います。 ただ、私は「暗黙の参照」と言っています。(すみません、わかりにくかったですね) これについての問題は解決できていないんですよ。 FD さんのソースですと、xlSheet, xlBook などは変数に 参照を残しているから、 COM オブジェクトの参照を解放する記述ができるんですよね。 逆に、暗黙的に参照されたオブジェクトは、変数に参照を残していないので解放の記述ができないということです。
メンバを限定するまでのパスがインポートされているという考え方が正しいと思います。 VB.NET でも Imports ステートメントでインポートすることで同様のことが可能です。
これは、ご自分で調べられる範囲だと思います。 たとえば、xlEdgeTop は Excel.XlBordersIndex.xlEdgeTop ですね。 残りは、オブジェクト ブラウザで検索してみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»