admin menu ≫  image  writes  admin
スポンサーサイト 
--.--.--.-- 
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
エクセルを使ったプログラムランチャー擬きの改良 
2009.06.15.Mon 
「ThisWorkbook.Close」の正しい使い方が理解できたので、「プログラムランチャー擬き」に以下のモジュールを追加したら、とっても使いやすくなった(^^v


'ThisWorkbookに記述したモジュール
'パブリック変数にブックのオープン状況を設定しておいて、ブックの終了方法を
'選択できるようにした
Private Sub Workbook_Open()
'通常のランチャー起動時にはパブリック変数のOpen_FlgをFalseにする
Open_flg = False
'編集などで直接ファイルを開いた場合はOpen_flg=Trueに設定する
If ActiveWorkbook.Name = ThisWorkbook.Name Then
Open_flg = True
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'開いているファイルが、このブックだけならエクセルを終了する
'尚、ブックのシートやマクロなどが変更されていれば
'保存の確認メッセージが表示される
If Cancel = False And Workbooks.Count = 1 Then
Application.Quit
End If
End Sub


'標準モジュールに以下の太字部分を追加し、変数宣言の一部を修正
Option Explicit
Public Open_flg As Boolean
Public IndexNo%
Dim IndexNo%
Sub Cmd_Start()
Const Title$ = "外部プログラムの実行"
Dim preActWbName, CmdSheet
Dim CmdLine$, File_ext$, File_Exts$, FileName$, ExeFilePath$, ExeFileName$, msg$
Dim i%, Row%, Style%, Response%, PathLength%, Exe_PathLen%, sec%
'現在アクティブ表示されているブックの名前を取得する。
preActWbName = ActiveWorkbook.Name
ThisWorkbook.Activate

'中略

'Open_flg = False(通常の起動)なら、データが変更されている
'ことはないが、念のためブックを保存しないように指定してから
'ブックを閉じる
If Open_flg = False Then
ThisWorkbook.Saved = True
ThisWorkbook.Close
End If

'ファイルを開くでオープンしている場合は、上述の処理が
'行われないため、処理開始前のブックをアクティブ表示する
Windows(preActWbName).Activate
End Sub

ユーザー設定ボタンにランチャーのマクロを登録
これで全てのブックから「ランチャー擬き」が起動できるようになった(^^v
20090614-ed.jpg

さてさて、散々悩んだブックを閉じるテンプラマクロ。(ブックを保存しないで閉じるマクロ)
複数のブックを開いている時に、以下のマクロを実行するとWorkbook_BeforeCloseが2回実行されていた。そして異常なく終了できる時もあったが、殆どの場合異常終了になった。その症状は「ブックを閉じる×をクリックしてブックを閉じた後で必ず発生した。閉じなかったブックがアクティブ表示され、作業を継続しようとするとマウスクリックが効かなくなってしまう。そして矢印キーを使ってセルを移動しようとするエラーになってエクセルが異常(強制)終了(@@;」・・・大抵のウエブサイトで紹介されているテンプラマクロ・・・要注意っす!(^^;;

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Workbooks.Count = 1 Then
Application.DisplayAlerts = False
Application.Quit
Else
ThisWorkbook.Close SaveChanges:=False '※
End If
End Sub


関連記事
スポンサーサイト
* スポンサーサイトエクセルを使ったプログラムランチャー擬きの改良へのコメント *
   

台風画報


ナショジオニュース

降水短時間予報

RSSフィード

月別アーカイブ

ブログ内の検索

プロフィール


  • Designed by Il mio diario
  • Powered by FC2BLOG
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。