Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7230 / 13645 ツリー ←次へ | 前へ→

【40342】エクセルプログラムの2重起動を禁止するには? HK 06/7/11(火) 23:28 質問[未読]
【40351】Re:エクセルプログラムの2重起動を禁止す... Statis 06/7/12(水) 9:20 発言[未読]
【40354】Re:エクセルプログラムの2重起動を禁止... HK 06/7/12(水) 11:00 質問[未読]
【40362】Re:エクセルプログラムの2重起動を禁止... Kein 06/7/12(水) 15:33 回答[未読]
【40363】Re:エクセルプログラムの2重起動を禁止... Kein 06/7/12(水) 15:34 発言[未読]
【40370】Re:エクセルプログラムの2重起動を禁止... HK 06/7/12(水) 17:36 質問[未読]
【40372】Re:エクセルプログラムの2重起動を禁止... Kein 06/7/12(水) 17:55 発言[未読]
【40389】Re:エクセルプログラムの2重起動を禁止... HK 06/7/13(木) 9:42 質問[未読]
【40420】Re:エクセルプログラムの2重起動を禁止... Kein 06/7/13(木) 15:23 回答[未読]
【40422】Re:エクセルプログラムの2重起動を禁止... HK 06/7/13(木) 15:33 質問[未読]

【40342】エクセルプログラムの2重起動を禁止する...
質問  HK  - 06/7/11(火) 23:28 -

引用なし
パスワード
   こんばんは、

万が一、エクセルを二重起動してデータを上書きしてしまうのを阻止するため、
エクセルを一度開いたら、そのプログラムの2重起動はできないようにしたいと思っています。
ネットでいろいろ探してみましたが、いいソースがありませんでした。
どうしたらよいのでしょうか?

ちなみに、フォームは使用していません。


よろしくお願いします。

【40351】Re:エクセルプログラムの2重起動を禁止...
発言  Statis  - 06/7/12(水) 9:20 -

引用なし
パスワード
   ▼HK さん:
>こんばんは、
>
>万が一、エクセルを二重起動してデータを上書きしてしまうのを阻止するため、
>エクセルを一度開いたら、そのプログラムの2重起動はできないようにしたいと思っています。

二重に起動とはどう言うことでしょうか?
もう少し具体的に説明願います。
色々な事が考えられますので。

【40354】Re:エクセルプログラムの2重起動を禁止...
質問  HK  - 06/7/12(水) 11:00 -

引用なし
パスワード
   >二重に起動とはどう言うことでしょうか?
>もう少し具体的に説明願います。
>色々な事が考えられますので。

了解しました。

私の教えてもらいたい2重起動は、

"AAA.xls"というプログラムを開いた状態で、
もう一度"AAA.xls"というプログラムを開くことです。

この時、他のExcelブックが開いていても問題ないようにできればと考えています。

よろしくお願いします。

【40362】Re:エクセルプログラムの2重起動を禁止...
回答  Kein  - 06/7/12(水) 15:33 -

引用なし
パスワード
   まず、VBEのメニューで「挿入む「クラスモジュール」を選択して
クラスモジュールを追加して下さい。デフォルトでは Class1 という名前に
なっているはずです。そこに以下のコードを入れます。

Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
  Dim MyB As Workbook
 
  For Each MyB In Workbooks
   If MyB.Name = Wb.Name And Not MyB Is Wb Then
     Wb.Close False: Exit For
   End If
  Next
End Sub

そして標準モジュールの先頭から

Dim X As New Class1

Sub Auto_Open()
  Set X.App = Application
End Sub
  
を入れて、保存して閉じて下さい。
再度開いたときから、アプリケーションレベルのイベントが自動起動します。
そのまま「ファイル」「開く」で同じブックを開こうとしてみて下さい。
一瞬開きかけるのが分かると思いますが、すぐに閉じるはずです。

【40363】Re:エクセルプログラムの2重起動を禁止...
発言  Kein  - 06/7/12(水) 15:34 -

引用なし
パスワード
   >「挿入む


「挿入」

の間違いです。

【40370】Re:エクセルプログラムの2重起動を禁止...
質問  HK  - 06/7/12(水) 17:36 -

引用なし
パスワード
   クラスモジュールを新規に作成して、
"Class1"に下記のコードを

>Public WithEvents App As Application
>
>Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
>  Dim MyB As Workbook
> 
>  For Each MyB In Workbooks
>   If MyB.Name = Wb.Name And Not MyB Is Wb Then
>     Wb.Close False: Exit For
>   End If
>  Next
>End Sub
>


新規に作成した標準モジュールの
"Module1"に下記のコードを記入してみました。

>Dim X As New Class1
>
>Sub Auto_Open()
>  Set X.App = Application
>End Sub
>  


何かがおかしいのか、
既存のブックが終了して、
新しくブックが開かれてしまいました。

【40372】Re:エクセルプログラムの2重起動を禁止...
発言  Kein  - 06/7/12(水) 17:55 -

引用なし
パスワード
   >既存のブックが終了して、
>新しくブックが開かれてしまいました。
ん ? ホントに新しいブックですか ? 同名のブックだから見分けるのは
難しいかも知れませんが、こちらのテストでは問題なく動きましたが・・。

【40389】Re:エクセルプログラムの2重起動を禁止...
質問  HK  - 06/7/13(木) 9:42 -

引用なし
パスワード
   はい、

見分けるために、
AAA.xlsのセルA1に”123”と入力してテストしてみました。

2重にAAA.xlsを開こうとすると、
まず、
AAA.xlsは既に開いています。2重に開くと、これまでの変更内容は破棄されます。AAA.xlsを開きますか?

というExcelのメッセージが出てきて“はい”を選択すると、
123と入力したブックが閉じて新しいブックが開かれてしまいます。

“いいえ”を選択すると何も起きませんでした。

なにか、動作環境が違うのでしょうか?
Excelを新規で開いてそこにKeinさんのコードだけを入れた状態です。
Excelは2003SP2、WindowsXP Proffesionalです。

【40420】Re:エクセルプログラムの2重起動を禁止...
回答  Kein  - 06/7/13(木) 15:23 -

引用なし
パスワード
   Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
  Dim MyB As Workbook
 
  Application.DisplayAlerts = False
  For Each MyB In Workbooks
   If MyB.Name = Wb.Name And Not MyB Is Wb Then
     Wb.Close False: Exit For
   End If
  Next
  Application.DisplayAlerts = True
End Sub

というように、メッセージを出さないようにするコードを追加してみたら、
どうなりますか ?
>Excelは2003SP2
こちらは Excel2000 なので、動作が違ってしまうのかも知れません。
その場合は、2003 のユーザーの回答を待つしかありませんが・・。

【40422】Re:エクセルプログラムの2重起動を禁止...
質問  HK  - 06/7/13(木) 15:33 -

引用なし
パスワード
   やはりだめでした。

Application.DisplayAlerts = False

を入れると、そこで処理が止まってしまいました。

画面をクリックすると処理は進むようになりますが、
結局メッセージが出てきて同じことになります。

7230 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free