- - PR -
Excel.ApplicationのActivePrinterによるプリンタの変更に関して
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-25 14:26
はじめまして。吉田と申します。
windowsXP + VisualStudio2003(VB)で開発を行っています。 処理としては 1.エクセルファイル読み込み 2.プリンタの変更 3.印刷 としたいのですがプリンタの変更のところでエラーが出てしまいます。 ロジック Dim ExcelObj As Excel.Application ExcelObj = CType(CreateObject("Excel.Application"), Excel.Application) Dim MyDoc = "D:\test.xls" ' PDF化したいファイル ExcelObj.Workbooks.Open(MyDoc) ExcelObj.Visible = False Dim s As String = ExcelObj.ActivePrinter 'デフォルトプリンタ ExcelObj.ActivePrinter = s エラーメッセージ 'System.Runtime.InteropServices.COMException' のハンドルされて いない例外が databind.exe で発生しました。 追加情報 : HRESULT からの例外です : 0x800A03EC。 また同じようなロジックですが ロジック Dim ExcelObj As Object ExcelObj = CreateObject("Excel.Application") Dim MyDoc = "D:\test.xls" ' PDF化したいファイル ExcelObj.Workbooks.Open(MyDoc) ExcelObj.Visible = False Dim s As String = ExcelObj.ActivePrinter 'デフォルトプリンタ ExcelObj.ActivePrinter = s エラーメッセージ 'System.Runtime.InteropServices.COMException' のハンドルされていない 例外が microsoft.visualbasic.dll で発生しました。 追加情報 : Application クラスの ActivePrinter プロパティを設定できません。 となってしまいます。 何か原因は考えられないでしょうか? 申し訳ありませんがよろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2005-11-25 14:34
COM オブジェクトを解放する
ところで、例外は 1 行目で起きるのでしょうか?
やっていることは同じで、遅延バインディングになっているだけですね。 事前バインディングの方が望ましいでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-11-25 14:50
お返事ありがとうございます。
コーディングの仕方も注意したいと思います。 参考になりました。ありがとうございます。 ちなみにエラーは ExcelObj.ActivePrinter = s のところで発生しています。 以上です。よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2005-11-25 15:02
ちょっと言い方が柔らかすぎましたが、 しっかりと解放しておかないと、Excel のプロセスが居座り続けます。 (メモリ リークを起こします)
Excel.Application.ActivePrinter だけでなく、 Printout メソッドの ActivePrinter 引数でも例外が発生しますか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-11-25 15:24
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13815&forum=7&3
| ||||||||||||
|
投稿日時: 2005-11-25 15:36
こっちでも良いですね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25519&forum=7
本来、プリンタ名は直接指定せず、 System.Drawing.Printing.PrinterSettings.InstalledPrinters から取得した方が良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-11-25 15:55
>しっかりと解放しておかないと、Excel のプロセスが居座り続けます。
確かに居続けていました^^; Printout メソッドの ActivePrinter 引数で試してみたところ解決する ことができました。 本当にありがとうございます。 |
1