【エクセル2003・マクロ】

エクセル2003で下記のことをしたいのですが、教えて下さい。

A)シート1、シート2があり、シート2を開こうとすると警告が出るようにしたいです。
 シート2をクリック→○○さん仕様です。開いてもいいですか?
 はい→開く
 いいえ→シートが開けない、またはシート1のA1セルに戻る(ファイルを閉じてはいけません)

B)ファイルを開くと、
  1)シート2を編集し上書きしても必ずシート1が開き、
  2)シート1のA~D列、X~Zが非表示になりシート保護がかかるようにする

素人なのでコードを張り付けるだけで、出来るような回答を希望致します。
宜しくお願い致します。

※今日はOPENにできませんので明日、OPEN致します。

回答の条件
  • 1人2回まで
  • 登録:2009/10/22 23:19:43
  • 終了:2009/10/23 13:29:13

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/10/22 23:50:27

ポイント100pt

ThisWorkbookのブックモジュールに貼り付けてください。

Private Sub Workbook_Open()
    With Worksheets("Sheet1")
        .Activate
        .Unprotect
        .Range("A:D,X:Z").EntireColumn.Hidden = True
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Sheet2" Then
        If MsgBox("○○さん仕様です。開いてもいいですか?", vbYesNo) = vbNo Then
            Worksheets("Sheet1").Activate
            Worksheets("Sheet1").Range("A1").Select
        End If
    End If
End Sub

ここではシート2を開くとメッセージボックスを出しますが、

そのときにシート2は見えてしまうことになります。

シート2を使用者に見せなくするためには非表示にするなどの方法があります。

id:msvista

回答、ありがとうございます。

早速、試してみました。

>シート2を使用者に見せなくするためには非表示にするなどの方法があります。

確かに見えるのはまずいので、この方法を教えて下さい!

よろしくお願いいたします。

2009/10/23 07:41:54

その他の回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692009/10/22 23:50:27ここでベストアンサー

ポイント100pt

ThisWorkbookのブックモジュールに貼り付けてください。

Private Sub Workbook_Open()
    With Worksheets("Sheet1")
        .Activate
        .Unprotect
        .Range("A:D,X:Z").EntireColumn.Hidden = True
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    End With
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Sheet2" Then
        If MsgBox("○○さん仕様です。開いてもいいですか?", vbYesNo) = vbNo Then
            Worksheets("Sheet1").Activate
            Worksheets("Sheet1").Range("A1").Select
        End If
    End If
End Sub

ここではシート2を開くとメッセージボックスを出しますが、

そのときにシート2は見えてしまうことになります。

シート2を使用者に見せなくするためには非表示にするなどの方法があります。

id:msvista

回答、ありがとうございます。

早速、試してみました。

>シート2を使用者に見せなくするためには非表示にするなどの方法があります。

確かに見えるのはまずいので、この方法を教えて下さい!

よろしくお願いいたします。

2009/10/23 07:41:54
id:neuromancer_sho No.2

neuromancer_sho回答回数28ベストアンサー獲得回数32009/10/23 00:18:17

ポイント30pt

ツール-マクロ-visual basic editor を開き、ThisWorkbookに以下を貼り付けます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh Is Sheet2 Then
        If MsgBox("○○さん仕様です。開いてもいいですか?", vbOKCancel) = vbCancel Then
            Sheet1.Activate
        End If
    End If
End Sub
Private Sub Workbook_Open()
    Sheet1.Activate
    ActiveSheet.Unprotect
    Sheet1.Columns("a:d").EntireColumn.Hidden = True
    Sheet1.Columns("x:z").EntireColumn.Hidden = True
    If Sheet1.Range("e:w").Locked = True Then
        Sheet1.Range("e:w").Locked = False
    End If
    Sheet1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

実際には「○○さん」が沢山いるでしょうから、シート名にその人の名前が付いているのなら、

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Not Sh Is Sheet1 Then
        If MsgBox(Sh.Name & "さん仕様です。開いてもいいですか?", vbOKCancel) = vbCancel Then
            Sheet1.Activate
        End If
    End If
End Sub

にすればOKです。

id:msvista

回答、ありがとうございます。

ばっちりでした。

ただ上の方の回答にもありますように、シート2の内容を非表示にしてする、

方法はないかと・・・

よろしくおねがいいたします。

2009/10/23 07:46:22
id:SALINGER No.3

SALINGER回答回数3454ベストアンサー獲得回数9692009/10/23 09:16:22

ポイント50pt

シート2が見えないようにするために、下の方のコードを次のように変更します。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Sheet2" Then
        Sh.Visible = False
        If MsgBox("○○さん仕様です。開いてもいいですか?", vbYesNo) = vbNo Then
            Worksheets("Sheet1").Activate
            Worksheets("Sheet1").Range("A1").Select
            Sh.Visible = True
        Else
            Sh.Visible = True
            Application.EnableEvents = False
            Sh.Activate
            Application.EnableEvents = True
        End If
    End If
End Sub
id:msvista

バッチリな回答をいただきありがとうございました!

素晴らしいです!

2009/10/23 13:28:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません