2重起動を防止するには?


いぬ  2006-07-13 19:13:33  No: 132340

おはようございます。

ただいま、
ひとつのPCでExcelファイルを2重に起動できないようにしたいと考えています。
例)ABC.xlsを開いているのに、もう一度ABC.xlsを開こうとした場合、
開こうとしたファイルを終了する。

これに対して下記のサイトに記述してあったサンプルコードを使ってみましたが、うまくいきませんでした。
なぜなのでしょうか?

ちなみに、下記のコードは標準モジュールに入れました。
Excel2003、WindowsXP使用です。

http://www.viplt.ne.jp/tllsp/tips/tips_excel_control.htm#011

11)EXCELの同一PCでの2重起動防止  

Option Explicit

Public Declare Function CreateEvent Lib _
"kernel32" Alias "CreateEventA" _
(ByVal LpEventAttributes As Long _
, ByVal bManualReset As Long _
, ByVal bInitiaLState As Long _
, ByVal LpName As String) As Long

Public Declare Function SetEvent Lib _
"kernel32" _
(ByVal hEvent As Long) As Long

Public Declare Function ResetEvent Lib _
"kernel32" (ByVal hEvent As Long) As Long

Public Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Public Xls_up_handle As Long
Public Xls_up_set As Long
Public Xls_up_res As Long

Public Const Xls_sheet_exist = 0
Public Const Xls_sheet_timeout = &H102&

Sub auto_open()
'/* フラグを起動する
Xls_up_handle = CreateEvent(0, True, False, "Xls_up_handle")
Xls_up_res = WaitForSingleObject(Xls_up_handle, 100)
Select Case Xls_up_res
Case Xls_sheet_exist
MsgBox "既に起動されています", vbExclamation
ActiveWorkbook.Close
Exit Sub
Case Xls_sheet_timeout
Xls_up_set = SetEvent(Xls_up_handle)
Exit Sub
Case Else
MsgBox "異常が発生しています", vbCritical
Exit Sub
End Select
End Sub

Sub auto_close()
'/* フラグリセット
Xls_up_set = ResetEvent(Xls_up_handle)
End Sub


特攻隊長まるるう  2006-07-14 20:02:35  No: 132341

>うまくいきませんでした。
全く動作しないコードでは無いと思います。
デバッグして動きを確かめてください。

書かれているコードが正常に実行されていれば、
うまくいっているという判断をしてください。
自分が思った動作と違うのであれば、それは
そもそもコードが違うのでは?質問者の頭の中を
透視することはできません。期待する動作と実際の
動作の違いを説明してください。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加