A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは。
他の方の回答で解決すれば、それでよいかとは思います。
用途によりけりですが、プロテクトが必要な場合に、考えてみました。こういうのは、その人のスキルに比例するかもしれませんが、はるかにむつかしいと思います。
私自身でしたら、シートを開いたりする場合は、Change イベントを用いずに、(コントロールツール側の)コマンド・ボタンにします。そのほうが、動作的に確実だからです。
その人専用のシートが開くようにします。シート名を、その人の名前に変更しても、同じように開きます。
シートの問題ですが、シートは、xlSheetVeryHiddenにします。そうしないと、開けられてしまいます。xlSheetVeryHidden 設定は、マクロからしか出来ません。
また、マクロ側も、不用意に、オートメーションオブジェクトや他のブックから オブジェクトブラウザを使われても、覗かれないように、Private Module にします。参照設定されても、名前リストさえも抜き出すことは出来ません。名前リストは、標準モジュールのPrivate モードにした場所に書きます。
------------------------------------------------------
サンプル:
Sheet4 ~ Shee6 を隠しシートとした場合の例
'名前入力用 Sheet1 (常時・表示モジュール)
Private Sub CommandButton1_Click()
Call CheckNames
End Sub
'標準モジュール
Option Explicit
Option Private Module
'複数ある場合は、「,」で区切り入力する
'名前のリスト
Private Const OurName As String = "佐藤,木村,安藤"
Sub CheckNames()
Dim ret As Variant
Dim dummy As Variant
Dim OurNames As Variant
Dim ShName As String
Dim wh As Worksheet
OurNames = Split(OurName, ",")
If Sheet1.Range("A3").Value <> "" Then
On Error GoTo ErrMsg
dummy = OurNames(0)
ret = WorksheetFunction.Match(Sheet1.Range("A3").Value, OurNames, 0)
If ret > 0 Then
Sheet1.Range("A3").ClearContents
For Each wh In Worksheets
'Sheet4 だとすれば、+3 になる
If wh.CodeName = "Sheet" & CStr(ret + 3) Then
wh.Visible = xlSheetVisible
wh.Activate
ret = 0
Exit For
End If
Next wh
End If
Else
MsgBox "名前が入力されていません。", vbCritical
End If
Exit Sub
ErrMsg:
If Err.Number() Then
MsgBox "該当名はありません。", vbCritical
Err.Clear
End If
End Sub
'ThisWorkbook へ
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
Dim num As Variant
On Error Resume Next
For i = 1 To Worksheets.Count
'+5 は、Sheet の次の文字を出す
num = Mid$(Worksheets(i).CodeName, InStr(Worksheets(i).CodeName, "Sheet") + 5)
'Sheet4 以上は、非表示
If CLng(num) > 3 Then
Worksheets(i).Visible = xlSheetVeryHidden
End If
Next i
End Sub
Private Sub Workbook_Open()
Dim i As Long
Dim num As Variant
On Error Resume Next
For i = 1 To Worksheets.Count
'+5 は、Sheet の次の文字を出す
num = Mid$(Worksheets(i).CodeName, InStr(Worksheets(i).CodeName, "Sheet") + 5)
'Sheet4 以上は、非表示
If CLng(num) > 3 Then
Worksheets(i).Visible = xlSheetVeryHidden
End If
Next i
End Sub
最後に、
'各Sheet には、ディアクティベートすると、非表示になってしまうようにする。
'Sheet4~Sheet6 までに、イベントによる非表示のプロパティを入れる
Private Sub Worksheet_Deactivate()
Me.Visible = xlSheetVeryHidden
End Sub
こうしておいて、VBAプロジェクトは、パスワード・ロックします。Sheet は、正常終了している限りは、非表示になります。正常終了した後で、マクロモードを「高」にして、マクロが動かないようにしても、そのシートは開くことができません。本来は、これに、開く前に、シートプロテクトを外し、閉じるときに、UsesrInterfaceOnlyのシートプロテクトをすれば、良いと思います。
ただ、名前ではなく、個々のパスワードにしたら、もっと強力です。
No.2
- 回答日時:
(1)セルに入力規則を設置することをVBAでやればどうですか。
ここにはマクロの記録で判りますので記しません。
(2)シートのChangeイベントで、セル(Target)のRow,ColumnでA3を特定・制限し、そのValueが佐藤かどうかきく、手もあります。
No.1
- 回答日時:
可能です。
まず、変更するシートに対して
Sub Worksheet_Change(ByVal Target As Range)
イベントに対するコードを書きます。
これはシート内のセルが変更されると起動されます。
この中でTarget(セルの番号等)が変更されたRangeオブジェクトが帰ってきますので
Target.Row と Target.Column で変更された場所が指定の場所か確認します。
で、指定の場所であれば
Target.Valueで内容を確認し、内容に対応したコードを書けばよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) エクセル 指定セル繰り返しマクロ 4 2022/06/06 17:08
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) Excel VBA 指定セルに入力されているパスからシートをコピーして別のブックに転記するVBAのコ 2 2022/04/19 15:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有にすると、シー...
-
Access-VBAでExcelファイ...
-
【EXCEL-VBA】ワークシートに別...
-
エクセル マクロについて、 Inp...
-
複数シートを一括で保護を掛け...
-
エクセルVBAでオブジェクトが必...
-
VBAでVlookup機能を使うときに...
-
マクロでフォルダ内のExcelを全...
-
エクセルマクロ 変数をワーク...
-
エクセルで特定の文字列が入っ...
-
VBAマクロ実行時エラーの修正に...
-
マクロの「SaveAs」でエラーが...
-
エクセルVBA 配列からセルに「...
-
エクセルVBAが途中で止まります
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
Excel VBAでのWorksheet_Change...
-
【Excel関数】UNIQUE関数で"0"...
-
VBA シートをコピーする際に Co...
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access-VBAでExcelファイ...
-
コンボボックスへ降順に表示す...
-
エクセルVBAでオブジェクトが必...
-
エクセルマクロ(超初心者)
-
マクロのコマンドボタン《Activ...
-
複数シートを一括で保護を掛け...
-
エクセルのVBAの関数について
-
エクセルのVBAについて教えてく...
-
Excell VBA にて配列に定数を代...
-
指定されたシートの削除
-
マクロ実行後、画面がちかちか...
-
VBAでVlookup機能を使うときに...
-
EXCELに関する質問
-
エクセルマクロ 変数をワーク...
-
マクロのイベントトリガー
-
【EXCEL-VBA】ワークシートに別...
-
エクセルVBA 別シートの最終セ...
-
Auto_Openマクロ
-
Excelに関数使用を調べる方法
-
ExcelVBA その回のみ...
おすすめ情報