おはようございます。
ただいま、
ひとつの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
>うまくいきませんでした。
全く動作しないコードでは無いと思います。
デバッグして動きを確かめてください。
書かれているコードが正常に実行されていれば、
うまくいっているという判断をしてください。
自分が思った動作と違うのであれば、それは
そもそもコードが違うのでは?質問者の頭の中を
透視することはできません。期待する動作と実際の
動作の違いを説明してください。
ツイート | ![]() |