人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

●質問者: msvista
●カテゴリ:コンピュータ
✍キーワード:エクセル クリック コード セル ファイル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●100ポイント ベストアンサー

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を使用者に見せなくするためには非表示にするなどの方法があります。

◎質問者からの返答

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

早速、試してみました。

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

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

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


2 ● neuromancer_sho
●30ポイント

ツール-マクロ-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です。

◎質問者からの返答

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

ばっちりでした。

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

方法はないかと・・・

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


3 ● SALINGER
●50ポイント

シート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
◎質問者からの返答

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

素晴らしいです!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ