[[20060409160057]] 『シートを選択できないようにする』(カズマル) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートを選択できないようにする』(カズマル)

複数のシートを使って一番最初にあるシートのみに反映させる
ものを作っておりまして、一番最初のシート以外は
いじられると面倒なので選択できないようにすることは
可能ですか?
複数人で使用しておりますので
誰かにいじられて変になると困るもので・・・
すいませんがお知恵をお貸しください。


 選択できないように保護を書ける方法や
 非表示にするなどは如何でしょう?

 (キリキ)(〃⌒o⌒)b

 早速のコメント有難うございます。
 シートの保護はしてありますが
 選択自体出来ない様にしたいのです。
 シートの保護で何も出来ないようにはしてあるのですが・・・
 すいません、よろしくお願いします。


 ツール → 保護 → シートの保護
 □ロックされたセル範囲の選択
 ↑
 ここのチェックを外してOK。

 以上で如何でしょう?
 (キリキ)(〃⌒o⌒)b

 非表示にしたいシートを選択(複数選択も可)して
 メニューの「書式」の「シート」の「表示しない」
 で非表示になります。

 表示したいときは
 メニューの「書式」の「シート」の「再表示」で表示したいシートを選択。
 こちらは1つずつしかできません。
 (やっちん)

 うぉぉぉぉぉぉぉぉ!!!
 軽くびびっちゃいました。
 完璧です。
 やっちんさん大変有難うございました。

上記の方法ですと、

シートを非表示にしたあとに、誰でも表示することが出来るので

passwordを入力しないとシートを表示できない様にするには、

どうしたら良いでしょうか。

またVBAで非表示のシートを選択してもエラーにならない方法は
どうすればよいでしょうか。

(らいち)


 パスワードでも出来るのですが、再表示すらさせないようにしてはどうでしょうか?
 VBEで対象のシートのVisibleプロパティにxlSheetVeryHiddenを設定すれば
 再表示もされません。(もちろん使う人がVBEを扱えれば見えるように出来ます)
 再度表示させる場合は同じくVisibleプロパティにxlSheetVisibleを設定。

 >またVBAで非表示のシートを選択してもエラーにならない方法はどうすればよいでしょうか。
 そもそもVBAで処理を行うのでしたらシートを選択する必要は無いと思います。
 Selectionを使わない処理をしてみましょう。
 (momo)

 詳しい説明は聞かないでください(汗
 しかも横槍的ですが。

 <シート名隠蔽用>
 Private Sub シート名隠蔽_Click()
     ActiveWindow.DisplayWorkbookTabs = False 'シート名が消える
     Range("B2").Select
 End Sub

 <シート名復活用>
 Private Sub シート名復活_Click()
    Dim MyValue As String

    MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
    If MyValue = "" Or MyValue <> "1234" Then
        MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
        Exit Sub
    End If
    ActiveWindow.DisplayWorkbookTabs = True 'シート名が現われる
    Sheets("メニュー (2)").Select
    Range("B2").Select
 End Sub

 >    If MyValue = "" Or MyValue <> "1234" Then
 VBA起動されちゃったらお手上げだけど。
 「"1234"」の1234を好きに変えてパスワードにしちゃってください。

 >    Sheets("メニュー (2)").Select
 「"メニュー (2)"」の メニュー (2)をこのVBAを使うシートのシート名を入れてください。

 上記のはシート名復活に使うやつのVBAです。

 下記のはシートの保護と保護解除に使うやつのVBAです。

 <シート保護用>
 Private Sub 保護_Click()
     ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
     Range("B2").Select
 End Sub
 <シート保護復活用>
 Private Sub 開放_Click()
     Dim MyValue As String

     MyValue = InputBox("これより先、管理者用パスワードが必要です。", "管理者より")
     If MyValue = "" Or MyValue <> "1234" Then
         MsgBox "「入力された管理者用パスワードが間違っています。」", vbCritical
         Exit Sub
     End If
     ActiveSheet.Unprotect
     Range("B2").Select
 End Sub

  >    If MyValue = "" Or MyValue <> "1234" Then
 VBA起動されちゃったらお手上げだけど。
 「"1234"」の1234を好きに変えてパスワードにしちゃってください。

 (おせっかい星人)

 あ!コマンドボタン作ってそれに割り当ててね。
 (おせっかい星人)

 シートタブが見えないだけだとCtrl+PageDown(PageUp)の
 ショートカットキーだけでシートが移動できてしまいますね
 (トゥルーマン)

 トゥルーマンさん
 いやんwそんなところつついちゃw
 ま、穴はありまくりだけど
 エクセルに詳しくない方々がいじくるなら
 ショートカットキーでシート移動なんて解らないんじゃないかと思ってみたり。
 まぁ私がその中の一人だったわけで(苦笑)
 (おせっかい星人)

みなさん、有難う御座います!

早速やってみます。

(らいち)


またVBAで非表示のシートを選択してもエラーにならない方法はどうすればよいでしょうか。
 そもそもVBAで処理を行うのでしたらシートを選択する必要は無いと思います。
 Selectionを使わない処理をしてみましょう。
 (momo)

−−−−−−−

Selectionを使わない方法というのは、どうすればいいんでしょうか・・・

いろいろ試してみましたが、よく分かりませんでした。

今、作成しているVBAは下記の通りです。「タグ」というシートを非表示に

すると、エラーが発生してしまいます。

Private Sub タグ作成_Click()
Dim InPt As Long

    Dim SaveName As String
    Dim wb As Workbook, wkbk As Workbook
    Set wb = ThisWorkbook
    InPt = Application.InputBox(prompt:="管理No.を入力", Type:=2)
    If InPt = False Then Exit Sub
    Sheets("タグ").Select
    With wb.ActiveSheet
        .Range("c3").Value = InPt
        .Range("B2:C16").Copy
    End With
    Set wkbk = Workbooks.Add
    With wkbk.ActiveSheet
        .Range("B2").PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        .Range("B2").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        .Columns("A:A").ColumnWidth = 0.5
        .Columns("B:B").ColumnWidth = 10
        .Columns("C:C").ColumnWidth = 50
    End With
    SaveName = "C:\Documents and Settings\123\デスクトップ\" & InPt & "タグ.xls"
    ActiveWorkbook.SaveAs Filename:=SaveName, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
    wkbk.Close False
    Sheets("タグ").Select

    Selection.ClearContents
    Sheets("台帳").Select
    Set wb = Nothing
    Set wkbk = Nothing
End Sub


 たとえば

 >Sheets("タグ").Select
 >With wb.ActiveSheet
 >  .Range("c3").Value = InPt
 >  .Range("B2:C16").Copy
 >End With

 この部分であれば

 With wb.Sheets("タグ")
   .Range("c3").Value = InPt
   .Range("B2:C16").Copy
 End With

 とすればSelectをしないで記述できます。
 非表示のシートをSelectするとActiveに出来ないのでエラーになってしまいます。
 (momo)

有難う御座いました!大変参考になりました。(らいち)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.