VB実用⑯ 印刷Ⅵ(Excel)

Similar documents
VB実用⑦ エクセル操作Ⅰ

VB実用⑰ 印刷Ⅶ(Word)

VB実用⑩ エクセル操作Ⅳ

ルーレットプログラム

データベースⅠ

データベース1

VB実用⑧ エクセル操作Ⅱ

DAOの利用

データベースⅡ

相性占いプログラム

データベース1

データアダプタ概要

VB.NET解説

PowerPoint プレゼンテーション

ブロック パニック

グラフィックス

mySQLの利用

データベースⅡ

ファイル操作

インベーダープログラム

データベースⅠ

ブロック崩し風テニス

3D回転体プログラム

占領双六ゲーム

プロセス間通信

ICONファイルフォーマット

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

構造体

Userコントロール

ファイル操作-インターネットキャッシュ

PowerPoint プレゼンテーション

VB実用⑬ 印刷Ⅲ(PrintFormメソッド)

VB実用⑨ エクセル操作Ⅲ

VB実用③ アクセス操作Ⅰ

何時何処で誰が

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

正規表現応用

VB実用⑱ 印刷Ⅷ(Accessに依る印刷)

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

Microsoft Excel操作

回文作成支援プログラム

チャットプログラム

万年暦プログラム

VB実用Ⅲ⑩ フリーデータベースⅡ

回文作成支援プログラム

倉庫番

ExcelVBA

VB.NET解説

画像閲覧プログラム

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

NotifyIconコントロール

プレポスト【問題】

データベース1

MS Office オートメーション

回文作成支援プログラム

ドライブは安全運転で in 滋賀♪

sinfI2005_VBA.doc

Prog2_12th

相性占いプログラム

データベースⅢ

Microsoft Word _VBAProg1.docx

PowerPoint プレゼンテーション

ファイル操作-バイナリファイル

モグラ叩きプログラム

ListViewコントロール

VB実用Ⅲ⑩ フリーデータベースⅡ

PowerPoint プレゼンテーション

プラグイン

エクセル詳細 アドイン

相性占いプログラム

ウィンドウ操作 応用


神経衰弱ゲーム

回文作成支援プログラム

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

PowerPoint プレゼンテーション

ファイル監視

Microsoft PowerPoint - vp演習課題

PowerPoint プレゼンテーション

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

マルチメディア・音声

アプリケーション

1. 入力画面

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

Microsoft Office操作(EXCEL)

MS Office オートメーション

Microsoft Word 練習問題の解答.doc

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター


VB6互換のファイルの処理

MS-ExcelVBA 基礎 (Visual Basic for Application)

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

PowerPoint プレゼンテーション

バスケットボール

Prog2_15th

PowerPoint プレゼンテーション

Prog1_6th

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

[Excelが自動化するVBAの魔法2]購入者限定テキスト

Transcription:

印刷 Ⅴ VB 2005 5 プログラムの概要 事務処理に於いて 集計結果等を印刷して 確認等を行う事も多い為 ペーパーレスオフィスが推奨される昨今に於いても 矢張り印刷に関する技術は必要で有る Visual Basic から印刷を行う方法は.NET 以降 PrintDocument オブジェクトを使用する方法が 標準と仕て一般的で有るが Professional 版等では ReportView や CrystalReport を利用する事も可能で有る 亦 Power Packs 2 では視覚的確認が容易な FormPrint がを向上させて復活して居る 此処では Access のデータを 条件を設定して抽出し 各種を設定した Excel シートに 出力位置を記述したデータファイルを利用して 吐き出し Excel の印刷を使用して印刷を行う 今回の課題項目 System.Data.OleDb 名前空間 (Access データベースの操作 ) データベースの接続 (OleDbConnection オブジェクト ) データベースの操作 (OleDbDataAdapter オブジェクト ) テーブルデータの格納 (DataSet オブジェクト ) Excel オブジェクト (Application Workbook Worksheet オブジェクト ) データとの設定 (Range オブジェクト Value HorizontalAlignment プロパティ ) レポートのプレビュー (Worksheet オブジェクト PrintPreview メソッド ) レポートの印刷 (Worksheet オブジェクト PrintOut メソッド ) 今回の重点項目 Excel オブジェクト (Application Workbook Worksheet オブジェクト ) データとの設定 (Range オブジェクト Value HorizontalAlignment プロパティ ) レポートのプレビュー (Worksheet オブジェクト PrintPreview メソッド ) レポートの印刷 (Worksheet オブジェクト PrintOut メソッド ) -1-

~ オブジェクト プロパティ一覧 グループボックス 1 テキストボックス1 テキストボックス2 テキストボックス3 テキストボックス 4 テキストボックス 5 ラベル 1 ラベル 7 グループボックス 2 コンボボックス 1 コンボボックス 2 ラジオボタン 1~ ラジオボタン 4 ボタン 1 ボタン 2 ボタン 3 コントロールの種類 プロパティ プロパティの設定値 フォーム name ExcelPrint FormBorderStyle FixedSingle StartPosition CenterScreen EXCEL プリント グループボックス1 name grpsearch 検索条件 グループボックス2 name grpmethod タイトル項目の検索方法 ラベル1~7 name lblitem1 ~ lblitem5 AutoSize False Font MS 明朝 太字 10 lblitem1: タイトル lblitem2: 価格 lblitem3: 購入日 lblitem4: カテゴリ ID lblitem5: 著者 ID lblitem6:~ lblitem7:~ Align MiddleRight -2-

テキストボックス1 name txttitle テキストボックス2 name txtprice1 Align Right テキストボックス3 name txtprice2 Align Right テキストボックス4 name txtdate1 テキストボックス5 name txtdate2 コンボボックス1 name cbocate コンボボックス2 name cbowriter ラジオボタン1~4 name radmethod1 ~ radmethod4 Checked radmethod1:true radmethod1: 部分一致 radmethod2: 前方一致 radmethod3: 後方一致 radmethod4: 完全一致 コマンドボタン1 name btnpreview Font MS 明朝 太字 12 プレビュー コマンドボタン2 name btnexecute Font MS 明朝 太字 12 印刷 コマンドボタン3 name btnfinish Font MS 明朝 太字 12 終了 参照設定事前に 下記のライブラリを参照設定して置く ActiveX Data Object x.x Library Microsoft Excel x.x Object Library x.x はバージョンに依り異なる -3-

Excel シートの作成 事前に 下記の様な Excel シートを作成し プログラムと同じディレクトリに excelprint.xls と謂うファイル名で 保存して置く 帳票類の印刷では 設定等の容易な Excel で帳票の雛型を作成して置く方法が 便利で有る -4-

プログラムリスト Public Class ExcelPrint Private Structure PrnPos Public Pcol As String Public Prow( ) As Integer End Structure Private Pos( 7 ) As PrnPos Private SD As String Private Cn As ADODB.Connection Private Rs As ADODB.Recordset Private Ex As Excel.Application Private Wb As Excel.Workbook Private Ws As Excel.Worksheet 複数のデータ型を含む構造体を宣言する 構造体には 配列も含める事が出来る ユーザ定義型も 通常のデータ型同様に 変数や配列の宣言に使用する事が出来る 此処で宣言した変数は 宣言したクラス内の総てのメソッド ( プロシージャ ) で値の参照と設定を行う事が出来る ' フォームが読み込まれた時の処理 Private Sub ExcelPrint_Load( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Load Dim F As String Dim I As Integer Dim J As Integer 此処で宣言した変数は宣言したプ ロシージャ内でしか値の参照と設 定を行う事が出来ない ' 起動パスの取得 SD = Application.StartupPath : If Not SD.EndsWith( " " ) Then SD &= " " ' セル位置の読込 For I = 0 To 7 ReDim Pos( I ).Prow( 4 ) F = SD & "excelprint.dat" FileOpen( 1, F, OpenMode.Input ) For I = 0 To 7 Input( 1, Pos( I ).Pcol ) For J = 0 To 4 Input( 1, Pos( I ).Prow( J )) FileClose( 1 ) StartupPath は プログラムを起動した EXE ファイルのパス ( 位置 ) を表す Excel のセルへの書込位置は 此の様に別ファイルに仕た方が メンテナンスが容易に成る ファイルからデータ単位で読み込むには 従来からのファイル操作を行うと便利で有る Object 変数は New キーワードを用いてインスタンスを生成する ' コネクションの確立 CursorLocation プロパティの設 F = SD & "data.mdb" 定は Access 2000 以降では必須 Cn = New ADODB.Connection Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & F & ";Persist Security Info=False;" Cn.Open( ) -5-

' コンボボックスへフィールド名の設定 Rs = New ADODB.Recordset Rs.Open( "SELECT * FROM カテゴリ ", Cn ) If Rs.RecordCount > 0 Then For I = 1 To Rs.RecordCount cbocate.items.add( Rs.Fields( " カテゴリ名 " ).Value & "" ) Rs.Move( ) Rs.Close( ) Rs.Open( "SELECT * FROM 著者 ", Cn ) If Rs.RecordCount > 0 Then For I = 1 To Rs.RecordCount cbowriter.items.add( Rs.Fields( " 著者名 " ).Value & "" ) Rs.Move( ) Rs.Close( ) ' エクセルの設定 F = SD & "excelprint.xls" Ex = New Excel.Application Wb = Ex.Workbooks.Open( F ) Ws = Wb.Worksheets( "Sheet1" ) Ex.Visible = True End Sub RecordCount プロパティには 抽 出したレコード数が格納される為 其の数丈のループで 総てのレコ ードを処理する事が出来る null データを文字列型と仕て操作 したり 数値化するとエラーが発 生する為 ヌルストリングを連結 して防いで居る Move メソッドは レコード セット内でカレントレコードを 1 行後に進めるメソッドで有る CreateObject ( "Excel.Application" ) でもオブジェクトを生成する事が出来る デバック後に Excel シートへの 書込状況を隠し度い場合は 此の 行のコメントアウトする ' フォームが破棄された時の処理 Private Sub ExcelPrint_Disposed( ByVal sender As Object, ByVal e As System.EventArgs ) _ Handles Me.Disposed ' オブジェクトの解放 Cn.Close( ) Rs = Nothing Cn = Nothing ' エクセルの終了 Ex.Application.DisplayAlerts = False Ex.Application.Quit( ) Ws = Nothing Wb = Nothing Ex = Nothing End Sub DisplayAlerts を False に設定すると 変更点の保存を促すメッセージボックスが表示されない 此等の Object 変数は終了する時に Nothing を代入して破棄しないと プログラム終了後もメモリに残存する ' ボタン ( 終了 ) がクリックされた時の処理 Private Sub Button1_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles Button1.Click ' フォーム自体をメモリから消去 Me.Dispose( ) Dispose メソッドを実行すると ' プログラムを強制的に終了自動的にフォームの Disposed イ End ベントが発生する End Sub -6-

' ボタン ( プレビュー 印刷 ) がクリックされた時の処理 Private Sub Buttons_Click( ByVal sender As System.Object, ByVal e As System.EventArgs ) _ Handles btnpreview.click, btnprint.click 複数のトリガでイベントが発生す Dim SQL As String る様に イベントハンドラを追加 Dim C As Integer して居る Dim I As Integer Dim F As Boolean 此処で宣言した変数は宣言したプ ロシージャを抜けると 自動的に ' データの抽出破棄される SQL = SetSQL( ) Rs.Open( SQL, Cn ) If Rs.RecordCount > 0 Then C = 0 Call ClearWorksheet( ) Recordset オブジェクトの EOF Do Until Rs.EOF は レコードポインタが レコー F = False ドの終端を超えた時に True と成 ' データのエクセルへの書込るプロパティで有る For I = 0 To 4 Ws.Range( Pos( C ).Pcol & CStr( Pos( C ).Prow( I ))).Value = Rs.Fields(I).Value & "" Ws.Range( Pos( C ).Pcol & CStr( Pos( C ).Prow( I ))).HorizontalAlignment = -4131 ' xlleft C += 1 1ページ分のデータ (8 件分 ) を ' 8 件分書込み時点で吐出セルに書込めば 一旦吐き出す If C > 7 Then If sender.equals( btnpreview ) Then Ex.Visible = True : Ws.PrintPreview( ) 1ページ分のデータを吐き出した Else 後 次処理の為に セルをクリア Ws.PrintOut( ) する自作メソッドを呼び出す C = 0 : F = True Call ClearWorksheet( ) Move メソッドは レコード セット内でカレントレコードを1 Rs.Move( ) 行後に進めるメソッドで有る Loop ' 未処理分の吐出 If Not F Then ループ終了後に 未だ吐き出して If sender.equals( btnpreview ) Then 居ないデータが有れば 吐き出し Ex.Visible = True : Ws.PrintPreview( ) を行う Else Ws.PrintOut( ) Ex.Visible = False Else MsgBox( " 抽出データは有りません!", MsgBoxStyle.Information, " 結果 " ) レコードセットが開いて居る状態 Rs.Close( ) で再オープンする事は出来ない End Sub -7-

' ワークシートをクリアするジェネラルプロシージャ ( 自作メソッド ) Private Sub ClearWorksheet( ) Sub プロシージャは 戻り値を返 Dim I As Integer さないプロシージャで有る Dim J As Integer For I = 0 To 7 For J = 0 To 4 Ws.Range( Pos( I ).Pcol & CStr( Pos( I ).Prow( J ))).Value = "" End Sub ' SQL を生成するジェネラルプロシージャ ( 自作メソッド ) Private Function SetSQL( ) As String Dim W As String Dim S As String = "" Dim P1, P2 As String Function プロシージャは 戻り値 を返すプロシージャで有る ' 条件節格納用文字列の初期化 W = "" ' 条件 ( タイトル ) の設定 文字列データは ' でクォートする If Not txttitle. = "" Then S = txttitle. If radmethod1.checked Then S = "%" & S & "%" ElseIf radmethod2.checked Then S = S & "%" ElseIf radmethod3.checked Then S = "%" & S If InStr( S, "%" ) > 0 Then W = " タイトル LIKE '" & S & "'" Else W = " タイトル ='" & S & "'" ADOBD の SQL でワイルドカードの表記は * では無く % で有る事に注意を要する ワイルドカードとの比較を行う場合の演算子は = では無く LIKE で有る事に注意を要する ' 条件 ( 価格 ) の設定 数値型データはクォートしない P1 = txtprice1. : P2 = txtprice2. If Not P1 = "" Then If Not P2 = "" Then S = " 価格 >=" & P1 & " AND 価格 <=" & P2 Else S = " 価格 >=" & P1 If W = "" Then W = S Else W = W & " AND " & S -8- 両方の価格欄に入力が為されて居 る時は 上限と下限が指定された 物と看做す 左側の価格欄而巳の場合は 下限 が指定された物と看做す

ElseIf Not P2 = "" Then S = " 価格 <=" & P2 If W = "" Then W = S Else W = W & " AND " & S Date 型の値をクォートする場合 ' 条件 ( 購入日 ) の設定 日付型データは # でクォートする クォーテーションでも良いが 一 P1 = txtdate1. : P2 = txtdate2. 般に シャープを使用する If Not P1 = "" Then If Not P2 = "" Then S = " 購入日 >=#" & P1 & "# AND 購入日 <=#" & P2 & "#" Else 上限と下限の指定に付いては 価 S = " 購入日 >=#" & P1 & "#" 格の場合と同様に処理する If W = "" Then W = S Else W = W & " AND " & S ElseIf Not P2 = "" Then S = " 購入日 <=#" & P2 & "#" If W = "" Then W = S Else W = W & " AND " & S If 文を 1 行で記述する場合は 末 尾に は付けない ' 条件 ( カテゴリ ) の設定 文字列データは ' でクォートする If Not cbocate.selectedindex < 0 Then S = " カテゴリ名 ='" & cbocate.selecteditem.tostring & "'" If W = "" Then W = S Else W = W & " AND " & S ' 条件 ( 著者 ) の設定 文字列データは ' でクォートする If Not cbowriter.selectedindex < 0 Then S = " 著者名 ='" & cbowriter.selecteditem.tostring & "'" If W = "" Then W = S Else W = W & " AND " & S 右側の価格欄而巳の場合は 上限が指定された物と看做す ' SQL 文の設定 S = "SELECT 本. タイトル, 著者. 著者名, カテゴリ. カテゴリ名, 本. 価格, 本. 購入日 " & _ "FROM 本, カテゴリ, 著者 " & _ "WHERE 本. カテゴリ ID= カテゴリ.ID AND 本. 著者 ID= 著者.ID" If Not W = "" Then S = S & " AND " & W ORDER BY 句では ソートに使 用するフィールドを指定する S &= " ORDER BY 本.ID;" ' 戻り値を設定して復帰 Return S End Function Return は 呼出元に復帰するメソッドで Function プロシージャの場合は 戻り値を設定する事が出来る End Class -9-

EXCEL の Worksheet オブジェクトの Range プロパティ Range オブジェクトを取得するプロパティ Object.Range( 引数 ) Object で指定したワークシートの特定のセル範囲を指定する 引数には マクロの言語の A1 形式での範囲を指定する 範囲名には 範囲を表す演算子 (:) 共通部分を表す演算子 ( スペース ) 複数の範囲を表す演算子 (,) を含める事が出来る 猶 ドル記号 ($) は 含める事は出来るが 無視される 亦 範囲の一部にローカルに定義した名前を使用する事も出来る 名前を使用する場合 其の名前はマクロの言語と看做される 此のプロパティは セル範囲の Range オブジェクトの取得に用いられる 下記に セル範囲の指定例を示す Range( "A3" ) Range( "B2:E8" ) Range( Object.Cells( 1, 1 ), Object.Cells( 5, 4 ) ) Range( " 範囲名 " ) 単一セルを取得 セル範囲を取得 セル範囲を取得 セル範囲を取得 上記に於いて 3 番目の例では 2 個の引数を指定する構文を使用して居る 此の構文では 第 1 引数で左上隅のセルを 第 2 引数で右下隅のセルを指定する 此の構文を利用すると 上記の Cells プロパティと併用して R1C1 参照形式の様にセルを座標と仕て縦横共に数字番地で扱う事が出来る 実際にセルを操作する場合には プロパティや Value プロパティや Formula プロパティを使用して 設定や取得する種類を特定する事が多い EXCEL の Worksheet オブジェクトの Cells プロパティ ( 参考 ) Range オブジェクトを取得するプロパティ Object.Cells( 第 1 引数, 第 2 引数 ) Object で指定したワークシートの特定のセルを指定する 引数 1 には 1 から始まる行 (Row) を表す数値を指定する 引数 2 には 1 から始まる列 (Column) を表す数値を指定する R1C1 参照形式の様にセルを座標と仕て縦横共に数字番地で扱う場合に多用されるプロパティで 単一セルの Range オブジェクトの取得に用いられる 実際にセルを操作する場合には プロパティや Value プロパティや Formula プロパティを使用して 設定や取得する種類を特定する事が多い -10-

EXCEL の Range オブジェクトの Value プロパティ 指定したセルの値を設定 取得するプロパティ Object.Value = 値 セルの値を 設定する オブジェクトには Range オブジェクトを指定する 値を取得する場合 セルが空の場合は Empty 値が返される 此れを調べるには IsEmpty 関数を使用する Range オブジェクトに複数のセルが含まれて居る場合は 値の配列が返される 此れを調べるには IsArray 関数を使用する EXCEL の Worksheet オブジェクトの PrintPreview メソッド 印刷プレビュー ( 印刷時のイメージ ) を表示するメソッド Object.PrintPreview オブジェクトには Worksheet オブジェクトを指定する Excel オブジェクトを非表示に仕て居る場合は 此のメソッドを実行する前に 必ず Excel オブジェクトを表示させる必要が有る 即ち Excel オブジェクトの Visible プロパティを True に設定する EXCEL の Worksheet オブジェクトの PrintOut メソッド オブジェクトを印刷するメソッド Object.PrintOut オブジェクトには Worksheet オブジェクトを指定する 下記の引数を指定する事も出来る ( 孰れも 省略可能 ) 第 1 引数で 印刷を開始するページの番号を指定する 第 2 引数で 印刷を終了するページの番号を指定する 第 3 引数で 印刷部数を指定する 第 4 引数で 印刷をする前に印刷プレビューを実行するか何うかを指定する (True か False) 第 5 引数で アクティブなプリンタの名前を指定する 第 6 引数で ファイルへ出力するか何うかを指定する (True か False) 第 7 引数で 部単位で印刷するか何うかを指定する (True か False) 第 8 引数で 出力するファイルの名前を指定する ( 第 6 引数が True の場合 ) Preview メソッドの場合とは異なり 此のメソッドを実行する時 必ずしも Excel オブジェクトを表示する必要は無い 即ち 非表示に仕て Excel オブジェクトを バックグラウンドで利用する事が可能で有る -11-

EXCEL の DisplayAlerts プロパティ マクロの実行中に特定の警告やメッセージの表示を制御するプロパティ Object.DisplayAlerts = 値 値が True( 既定値 ) の場合 マクロの実行中に特定の警告やメッセージを表示する 値には True か False のブール値を指定する マクロを実行して居る間に ユーザーに入力を促すメッセージや警告メッセージを表示させない場合は此のプロパティを False を設定する 猶 此のプロパティは False に設定した儘 マクロの実行を終了しても 自動的に True には戻らない Visual Basic から操作する場合 Excel シートに加えた変更を保存せずに終了する時には 此のプロパティを False に設定して 変更を保存しますか? と謂うダイアログボックスを表示しない様にする事が多い EXCEL の Quit メソッド Excel を終了するメソッド Object.Quit Object で指定した現在開いて居る Excel を終了する Quit メソッドを使用すると 開いて居るブックを未だ保存して居ない場合は 変更を保存するか何うかを確認するダイアログボックスが表示される メッセージを表示させない場合は Quit メソッドを実行する前に 総てのブックを保存するか 又は DisplayAlerts プロパティを False に設定する DisplayAlerts プロパティに False が設定されて居ると 確認メッセージは表示されず 変更したブックを保存しないで Excel を終了する 猶 ブックを保存しなくても 其のブックの Saved プロパティに True を設定すると 確認メッセージを表示せずに Excel を終了させる事が出来る 注意 : 此のメソッドを用いて Excel を正しく終了しない場合 例えば エラー等が発生し実行が途中で中断された様な場合には Excel は 終了しないで メモリに残存した儘と成る 此れを何度も繰り返すと メモリ ( リソース ) 不足と成り システムがフリーズする事が有る 特に Excel を非表示に仕て居る場合は タスクバーにも表示されない為 注意を要する 此の様な場合には Ctrl+Alt+Delete で プログラムの強制終了 ダイアログボックスを開き Excel が残存して居ないか確認し 残存して居れば終了する 参考 :Excel を終了するには 上記の Quit メソッドの他に Close メソッドを使用する方法も有る 両者の違いは Quit メソッドが Application オブジェクトを対象に仕て居るのに対し Close メソッドが Workbooks コレクション 又は Workbook オブジェクトを対象に仕て居る点で有る 其の為 Quit メソッドは エクセルを終了し Close メソッドは ワークブックを閉じると謂うのが 夫々れのメソッドので有ると謂える -12-