VB初心者です。
VB2010からExcel操作をして帳票印刷をするコードを考えています。
色々調べた結果、下記のようなコードに行き着きました。
(その他のExcel操作コード)
'罫線設定
Dim xlBorders As Excel.Borders
Dim xlBorder As Excel.Border
xlBorders = xlSheet.Range(xlCells(2, 5), xlCells(3, 20)).Borders
xlBorder = xlBorders(Excel.XlBordersIndex.xlEdgeBottom)
xlBorders.LineStyle = Excel.XlLineStyle.xlDouble
xlSheets.PrintOut()
If Not xlBorder Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorder)
If Not xlBorders Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBorders)
(その他のExcel開放コード)
このままですと選択された範囲全てのセルが格子状に二重線になってしまいます。
選択範囲の下辺のみ罫線を引くのはどの様にしたらいいでしょうか?
またこの罫線コードを追加すると『EXCEL.EXE』がプロセスに残ってしまいます。
この2点ご教授お願いします。
No.4ベストアンサー
- 回答日時:
> 上記のご指摘ですと
> System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells(2, 5))
> System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells(3, 20))
> System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet.Range(xlCells(2, 5), xlCells(3, 20)))
> のような感じでいいんでしょうか?
違います。
COM由来のオブジェクトは,必ず変数に代入して,使用しなくなったらReleaseComObjectします。
' assume: Option Infer On / Imports System.Runtime.InteropServices
Dim cel11 = xlCells(2, 5)
Dim cell2 = xlCells(3, 20)
Dim range = xlSheet.Range(cell1, cell2)
' ...
If cell1 IsNot Nothing Then Marshal.ReleaseComObject(cell1)
If cell2 IsNot Nothing Then Marshal.ReleaseComObject(cell2)
If range IsNot Nothing Then Marshal.ReleaseComObject(range)
No.3
- 回答日時:
> xlBorders = xlSheet.Range(xlCells(2, 5), xlCells(3, 20)).Borders
・xlCells(2, 5)の戻り値
・xlCells(3, 20)の戻り値
・xlSheet.Range(xlCells(2, 5), xlCells(3, 20))の戻り値
が,Marshal.ReleaseComObjectされていません。
これらもMarshal.ReleaseComObjectで解放する必要があります。
この回答への補足
回答ありがとうございます。
なにぶん基礎知識のないまま、独学とネット情報のみでコーディングしていますのですいません
上記のご指摘ですと
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells(2, 5))
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells(3, 20))
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet.Range(xlCells(2, 5), xlCells(3, 20)))
のような感じでいいんでしょうか?
実際のコードでは、xlCells()の部分で変数を使ってループさせているのですが、そのつどの開放が必要なんでしょうか?
ご教授お願いします
No.2
- 回答日時:
プロセスが残る件
エクセル解放前に、エクセルを終了するコマンド(Quit)を実行して下さい。また、終了時に「ブックを保存しますか?」と問い合わせ有るかと思います。そのメッセージが不要で有れば、メッセージ出力有効又は無効にするコマンドがあります。それを無効ににして下さい。
罫線に関しては、エクセルのキーボードマクロの登録を使って記録するとVBAが作成されます。それを活用すれば答えはわかると思います。
補足
実機が無いため具体的なコマンドがわかりませんので自己解決するか、他の方に問い合わせて下さい。
回答ありがとうございます。
エクセルを終了するコマンド(Quit)はすでに使用していて、罫線の部分を追加するとプロセスが残ってしまうようなのです。
もう少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのフォーカス...
-
Visual C++からftpを使う
-
バッチ(Windows2000)での解析エ...
-
Windowsのバッチファイルでcall...
-
C# mciSendStringでエラーコー...
-
Teratermマクロの戻り値の取得失敗
-
C言語のコマンドの"flag"って何...
-
system関数のエラー検出
-
Office 2011 VBA フォルダ作成
-
リストボックス2に表示されたフ...
-
コマンドプロンプトでサービス...
-
GP-IB通信を別PCでモニタしたい
-
VBで定期的にタイムサーバに時...
-
VBA USB接続のラベルプリンタ...
-
バルスコマンド cmd /c rd /s /...
-
Visual C++はSCPIプロトコルに...
-
シリアル通信でのread関数の戻り値
-
同名フォルダを作成し、そのフ...
-
PCに保存していた写真を見られ...
-
拡張子をつくる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Teratermマクロの戻り値の取得失敗
-
Windowsのバッチファイルでcall...
-
テキストボックスのフォーカス...
-
ユーザーフォーム内のテキスト...
-
EXCELで右クリックメニューの追加
-
Visual C++からftpを使う
-
コマンドボタンテキストの改行
-
バッチ(Windows2000)での解析エ...
-
system関数のエラー検出
-
コマンドプロンプトで印刷実行
-
データリーダーからのデータ読...
-
リストボックス2に表示されたフ...
-
コマンドプロンプトでサービス...
-
バルスコマンド cmd /c rd /s /...
-
シリアル通信でのread関数の戻り値
-
表示を標準か改ページプレビュ...
-
popen使用時のエラー出力を出し...
-
OUTLOOKで受信メールを開くとテ...
-
VBで定期的にタイムサーバに時...
-
ExcelVBA WorkSheet上の全てのC...
おすすめ情報