Excel VBA質問箱 IV

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

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


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

【49199】エクセルで一つのブックしか開けなくする方法は? furuya 07/5/27(日) 14:55 質問[未読]
【49212】追加補足 furuya 07/5/27(日) 22:05 質問[未読]
【49225】Re:エクセルで一つのブックしか開けなくす... りん 07/5/28(月) 6:31 回答[未読]
【49230】Re:エクセルで一つのブックしか開けなくす... ichinose 07/5/28(月) 8:07 発言[未読]
【49226】Re:エクセルで一つのブックしか開けなくす... りん 07/5/28(月) 6:38 発言[未読]

【49199】エクセルで一つのブックしか開けなくする...
質問  furuya  - 07/5/27(日) 14:55 -

引用なし
パスワード
   教えてください。
たとえば、ある特定のエクセルのブックを開いている間は、後から他のブックを開こうとしても開けないように設定することは可能でしょうか。
ある特定のブックと同時に他のブックを開きたくないのです。

【49212】追加補足
質問  furuya  - 07/5/27(日) 22:05 -

引用なし
パスワード
   エクセルで開けるブックの数を一つにしたいのです。
たとえば、
applicationオブジェクトで開けるブックの最大数を1に設定する
ある特定のブックのアクティブシートがウィンドウから非アクティブになったときにワークブックコネクションをカウントし、2以上だったらアクティブワークブックを閉じる
など、可能でしょうか。

【49225】Re:エクセルで一つのブックしか開けなく...
回答  りん E-MAIL  - 07/5/28(月) 6:31 -

引用なし
パスワード
   furuya さん、おはようございます。

>たとえば、ある特定のエクセルのブックを開いている間は、後から他のブックを開こうとしても開けないように設定することは可能でしょうか。
>ある特定のブックと同時に他のブックを開きたくないのです。

クラスでブックの追加を監視します。

Classモジュールに以下を記述します
'=====================================================Class1 Start
Public WithEvents App As Application

Private Sub App_NewWorkbook(ByVal Wb As Workbook)
   '閉じる処理の実働部分は別
  WBC Wb, "新規追加もできません"
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
  If Wb.Name <> ThisWorkbook.Name Then
   '閉じる処理の実働部分は別
   WBC Wb, "同時に起動はできません"
  End If
End Sub
'共通処理部分
Sub WBC(arg1 As Workbook, arg2 As String)
  MsgBox arg2, vbExclamation, "ごめんね"
  arg1.Saved = True
  arg1.Close
End Sub
'=====================================================Class1 End

ThisWorkbookに以下を記述します
'=====================================================ThisWorkbook Start
Dim Cl As New Class1
Private Sub Workbook_Open()
  Set Cl.App = Application
End Sub
'=====================================================ThisWorkbook End

こんな感じです。

このブックを保存した後で開いた後で、ファイルを開いたり新規作成してみてください。
一度開きかけますが、すぐに閉じます。

 すでに開いているものについては処理しないので、閉じたい場合はThisworkbookのOpenイベントで、すでに開いているものがあれば閉じるなどの処理を入れるとよいかもしれません。

【49226】Re:エクセルで一つのブックしか開けなく...
発言  りん E-MAIL  - 07/5/28(月) 6:38 -

引用なし
パスワード
   furuya さん、おはようございます。

>たとえば、ある特定のエクセルのブックを開いている間は、後から他のブックを開こうとしても開けないように設定することは可能でしょうか。
>ある特定のブックと同時に他のブックを開きたくないのです。

開いているものにも、これから開こうとするものにも、非表示ブックがないという前提ならClassを使用しなくてもいい方法もあります。

すべてThisworkbookに記述します。

Private Sub Workbook_Deactivate()
  Dim wb As Workbook
  For Each wb In Application.Workbooks
ます。
   If wb.FullName <> ThisWorkbook.FullName Then _
     WBC wb, "他のブックは追加できません"
  Next
End Sub
'共通処理部分
Sub WBC(arg1 As Workbook, arg2 As String)
  MsgBox arg2, vbExclamation, "ごめんね"
  arg1.Saved = True
  arg1.Close
End Sub

こんな感じです。

【49230】Re:エクセルで一つのブックしか開けなく...
発言  ichinose  - 07/5/28(月) 8:07 -

引用なし
パスワード
   おはようございます。
>
>Classモジュールに以下を記述します
>'=====================================================Class1 Start
>Public WithEvents App As Application
>
>Private Sub App_NewWorkbook(ByVal Wb As Workbook)
>   '閉じる処理の実働部分は別
>  WBC Wb, "新規追加もできません"
>End Sub
>
>Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
>  If Wb.Name <> ThisWorkbook.Name Then
>   '閉じる処理の実働部分は別
>   WBC Wb, "同時に起動はできません"
>  End If
>End Sub
>'共通処理部分
>Sub WBC(arg1 As Workbook, arg2 As String)
>  MsgBox arg2, vbExclamation, "ごめんね"
>  arg1.Saved = True
>  arg1.Close
>End Sub
>'=====================================================Class1 End
>
>ThisWorkbookに以下を記述します
>'=====================================================ThisWorkbook Start
>Dim Cl As New Class1
>Private Sub Workbook_Open()
>  Set Cl.App = Application
>End Sub
>'=====================================================ThisWorkbook End
>
>こんな感じです。
>
>このブックを保存した後で開いた後で、ファイルを開いたり新規作成してみてください。
>一度開きかけますが、すぐに閉じます。

私もこれで良いと思っていたのですが、ひとつだけ留意点が・・。

開くブックの中に

ThisworkBookのWorkbook_Openイベントが記述されていると
これを実行してしまいます。

例えば、
開いたブック内に

Private Sub Workbook_Open()
  UserForm1.Show
End Sub

なんて記述があるとユーザーフォームが表示されてしまいます。

因みにこれ、Auto_Open()内で記述した場合は、
正常に処理(Auto_Open内のコードの実行前に閉じられてしまいます)されます。

これを何とかする方法があれば良いのですが・・・・。

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