Excel VBA質問箱 IV

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

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


9937 / 13644 ツリー ←次へ | 前へ→

【24677】続・二重に開くのを禁止するには yamazaki 05/5/2(月) 20:01 質問[未読]
【24678】Re:続・二重に開くのを禁止するには ponpon 05/5/2(月) 20:58 発言[未読]
【24682】Re:続・二重に開くのを禁止するには 小僧 05/5/3(火) 1:48 回答[未読]
【24683】Re:続・二重に開くのを禁止するには 小僧 05/5/3(火) 2:11 発言[未読]
【24684】Re:続・二重に開くのを禁止するには yamazaki 05/5/3(火) 6:39 お礼[未読]

【24677】続・二重に開くのを禁止するには
質問  yamazaki  - 05/5/2(月) 20:01 -

引用なし
パスワード
   以前"二重に開くのを禁止するには"でレスをつくり、ponponさんとウッシさんのご意見を参考にして作ってみました。

"二重にひらくのを禁止するには"のレスを抜粋

不特定多数のヒトが使用するEXCELブック(仮にAとします)があるの
ですが、このAを使用するにあたり、間違った操作(特に終了操作)を
されるといけないのでツールバーやメニューバーを隠すことにしました。
ここで、他のEXCELブック(Bとします)を開いて次にA(上記にて説明)を、
開いたらAの終了時に間違ってBの編集内容を消されてしまうことがあるのでこれを
防ぎたいと思います。

私の作った下記の構文は上記のレスの条件と一致していません。というのか…
条件により一致しないことがあります。無効にした場合はどうにもならないということです。なにか抜け道というか裏道というのがあったら教えてください。

Private Sub Workbook_BeforeClose(Cancel AS Boolean)

Dim i As Worksheet
  For Each i In Sheets
   IF Not i Name = "Sheet1" Then
  i.Visible = XLSheetVeryHidden
End if
Next i
Me.Save

end sub

Private Sub Workbook_open()

Dim wb as Workbook
 For each wb In Workbooks
Dim i As Worksheet
For Each i In Me.worksheets
i.visible = XlsheetvVisible
Next i
Sheets("aaa").select

If wb.Name <> Thisworkbook.Name And _
wb Name <> "PERSONAL".XLS then
MSGBOX "他のエクセル画面を全て終了してからbbbを開いて下さい。”,48
Application.DisPlayAlerts = FALSE
Thisworkbook.close
Application.DisPlayAlerts = True
・・・以下省略

無理かな…。

【24678】Re:続・二重に開くのを禁止するには
発言  ponpon  - 05/5/2(月) 20:58 -

引用なし
パスワード
   こんばんは。
>無効にした場合はどうにもならないということです。
というのは、マクロをということでしょうか?
もしそうであるなら、
私には、わかりません。

【24682】Re:続・二重に開くのを禁止するには
回答  小僧  - 05/5/3(火) 1:48 -

引用なし
パスワード
   ▼yamazakiさん ponpon さん:

#【24572】二重に開く事を禁止するには 
も参考させて頂きましたが、

>Bを開いている場合は一旦終了しない限りはAは警告など出して
>開けないというふうにしたいのです。

Bという名前に限らず、他のブックが開いていたらという事でしたら
Aのブックの「ThisWorkbook」のところに、

Private Sub Workbook_Open()
  If Application.Workbooks.Count > 1 Then
  MsgBox "他のエクセル画面を全て終了してからbbbを開いて下さい。", 48
  ActiveWorkbook.Close
  End If
End Sub

で対応できるように思われます。

>無効にした場合はどうにもならないということです。

「マクロを無効にする」を選んでもマクロの自動実行ができる裏道があった場合
悪意のあるマクロの実行を防ぐ手段がなくなってしまいます。
仮にそのような方法があった場合でも(少なくとも当方は知りませんが)
それを公表する事は、yamazakiさんに悪意がなくとも
非常に危険な事に繋がると思われます。

【24683】Re:続・二重に開くのを禁止するには
発言  小僧  - 05/5/3(火) 2:11 -

引用なし
パスワード
   注意を促す程度で宜しければこんな方法はいかがでしょうか?

Sheet名:無効

真ん中に大きく
「マクロを有効にする」で再起動してください。

とでも目立つように書いておく。

んでThisWorkbookへの記述です。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Sht As Worksheet
  ActiveWorkbook.Sheets("無効").Visible = xlSheetVisible
  For Each Sht In ActiveWorkbook.Sheets
    If Sht.Name <> "無効" Then Sht.Visible = xlSheetHidden
  Next
End Sub

Private Sub Workbook_Open()
Dim Sht As Worksheet
  If Application.Workbooks.Count > 1 Then
   MsgBox "他のエクセル画面を全て終了してからbbbを開いて下さい。", 48
    ActiveWorkbook.Close
  End If
  
  For Each Sht In ActiveWorkbook.Sheets
  If Sht.Name = "無効" Then
    Sht.Visible = xlSheetHidden
  Else
    Sht.Visible = xlSheetVisible
  End If
  Next
End Sub

イベントがBeforeCloseのため閉じる度に無効シートが見えてしまったり
また非表示にしたシートを手動で表示にできたりと不完全ではありますが、
悪意のない使用者の注意喚起程度にはなると思われます。

【24684】Re:続・二重に開くのを禁止するには
お礼  yamazaki  - 05/5/3(火) 6:39 -

引用なし
パスワード
   ▼小僧 さん ponpon さん:

ご意見ありがとうございました。
言われていることはたしかにごもっともです。無効にしたらマクロはうごきませんよね。
ただブックが閉じてしまうというのは、よい方法だと思いました。その方向で作ろうと思います。

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