お世話になっております。
表題の件で ご相談が御座います。
現状、住所録のようなリストを担当者毎に名前を付けて担当者のローカルに保存してもらって
管理・入力してもらっています。(仮にbook ABC~Jとして)
そのリスト(book ABC~J)を毎日メールに添付して送信してもらい、自分の保管している大元のbookに移しています。(仮にbook「あ」とします)
その時に各担当者が おかしな入力をして寄越したら修正して送り返したいのですが
自分が いちいち全員のシート(book ABC~J)にパスワード付の保護を掛けてしまったので編集する際に保護を解除してから やらなければいけないはめになりました。
保護を掛けないのは方法の1つとしてありますが それはあまりにもリスキーなのでやりたくありません。
VBAに不可能は無いと信じておりますが マクロを実行する度にbook ABC~Jのシートの保護を解除し、閉じる時には自動的にパスワード付で保護を掛けて閉じる(アクティブになっているブックを)というような事は可能でしょうか?
イメージとしては 自分の管理するbook「あ」にVBAを登録しておき、開いている全てのブックに有効になるようにしたいと考えているのですが
どなたか お分かりになる方、ご教示いただけますでしょうか。
現在「かんプロVBA」勉強中で御座いますが「基礎編」なので色々ご迷惑をお掛けするかと存じますが
何卒宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
コンピューター名の説明が欠けていました、失礼いたしました。
マイコンピューターのプロパティからコンピュータ名を見れます。
ookami1969さんのPCだけでなく各担当者でも開けるようにしたければ、
Const AdminName As String = "コンピュータ名称"を変数化して、
Dim NameList As Variant
NameList = Array("PC名1", "PC名2", "PC名3")
上記のような感じであらかじめ登録しておくなどの手段があります。
dim i as long
for i = 0 to ubound(Namelist)
If ret = 0 And retstr = Namelist(i) Then
ActiveSheet.Unprotect ("abc")
End If
Next i
もしくは各担当者のコンピュータ名を同じコンピュータ名に変更してもらえばよいともいえます。
ただネットワーク参照時に見づらくなってしまいますが、共有などしていなければ手軽な方法といえます。
ご回答 誠にありがとう御座います。
3度も回答いただきましてありがとう御座いました。
非常に分かりやすく教えていただきまして助かりました。
ありがとう御座いました。
No.2
- 回答日時:
ActiveSheet.Protect "abc"
ActiveSheet.Unprotect ("abc")
この"abc"がパスワードになります、現在設定されているパスワードになさってください。
解除はパスワードが違えばエラーになります。
設定ですが、すでに保護が設定されていた場合、既存の設定とパスワードが異なるとエラーになります。
このマクロは全てのブックに登録することで、管理負荷を軽減できると考えて照会したに過ぎないので、実行して全てのブックの保護を解除するものではありません。
あくまでブックを開いた時点で処理が実行され、保護を自動的に解除するものです。
そこで誰が今ブックを開いたのかを特定することで、自動解除対象者と非対象者を区別します。
ここでコンピューター名称を使用して区別しようと考えたわけです。
Const AdminName As String = "コンピュータ名称"
"コンピュータ名称"に自動解除対象にしたいコンピュータの名称を入力してください。
以上が
>ワークブックオープン時にコンピュータ名を取得し、それがあらかじめ登録していたものと等しい場合、保護を解除します。
ブック名ではなくコンピューター名なのでしょうか?
への回答です。
>悪用できるので自己の責任で管理してください。
さてこのロジックですが、VBEを起動すればパスワードが丸見えで危ないというのが弱点です。
そこでVBAの保護を行いパスワードを設定してしまえば解決できますね。
他にはこのコードを流用すれば、パスワードを忘れてしまった、シートの保護のパスワードを求めることができてしまうロジックが組めてしまう点ですね。
No.1
- 回答日時:
悪用できるので自己の責任で管理してください。
ワークブックオープン時にコンピュータ名を取得し、それがあらかじめ登録していたものと等しい場合、保護を解除します。
セーブ前にシートを保護します。
ThisWorkBook内に貼り付けてください。
'コンピューター名の取得
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveSheet.Protect "abc", DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
End Sub
Private Sub Workbook_Open()
Const AdminName As String = "コンピュータ名称"
'コンピューター名取得
Dim ret As Long
Dim retstr As String * 1024
ret = GetComputerName(retstr, 1024)
If ret = 0 And retstr = AdminName Then
ActiveSheet.Unprotect ("abc")
End If
End Sub
ご回答ありがとう御座います。
画面で見て文章の絶妙な改行に感服致しました。
何点か疑問点が御座いますので、もしよろしければ再度回答をいただけませんでしょうか。
宜しくお願い致します。
>悪用できるので自己の責任で管理してください。
ちょっと怖いのですが、具体的には どのような事に気を付ければ良いのでしょうか?
(どのように悪用されるのかを書いてしまったら、その時点で悪用される恐れがありますが。。。)
(でも どちらにせよPGのみなさまは上記モジュールをご覧になれば分かるんですよね?)
>ワークブックオープン時にコンピュータ名を取得し、それがあらかじめ登録していたものと等しい場合、保護を解除します。
ブック名ではなくコンピューター名なのでしょうか?
また、もしコンピューター名という事であれば、それは共有フォルダ等の時と同じ名前で良かったでしょうか。
(各担当者の端末名であるという事であればどこを見れば分かるかもご教示いただきたいのですが。。。)
あと、シートに掛けてある保護パスワードは無視して保護の解除が出来てしまうのでしょうか。
もし パスワードの入力が必要なのであれば、どこに入力したら良いかもご教示いただけませんでしょうか。
とりあえず 1点目、2点目の疑問が解決しないとテストもままならない状態ですので
是非とも再回答お願い致します。
お手数お掛けしまして誠に申し訳ありません。
何卒宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/03/01 15:44
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
- Visual Basic(VBA) Excel VBA マクロ 先頭行の固定とオートフィルター設定を全てのシートに適用したいです 1 2022/11/12 15:32
- Excel(エクセル) エクセル VBAでBook モジュールのプロシージァ(コード)に除外シートを設定したい 1 2023/01/11 15:53
- Visual Basic(VBA) 印刷をVBAでしたい とあるフォルダに1〜5までの名前がついたbookが保存されてます このbook 2 2022/03/28 09:30
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 翌日にお休み予定の従業員がいる場合にアラートを出したい 1 2023/07/11 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワード レイアウトの崩れ
-
A4縦の2枚のワードをA3にするや...
-
ワード、上下中央揃えにしたい...
-
ワードの差し込み文書で困って...
-
なぜワードで開けず互換性ソフ...
-
IMEパッドの手書き入力
-
最近MacBookに変えました。 マ...
-
アップルに電話したけどやはり...
-
ワードで大量の図形を一括でグ...
-
A4サイズ横位置というのは ワー...
-
スマホアプリのワードが横書き...
-
「大谷翔平」をローマ字で書くには
-
キーボードの割り当てを再起動...
-
作成した文書の名前の変化について
-
互換性のないSafariからみた画...
-
KADOKAWA電撃大賞の互換ソフト...
-
ワードが白と黒が反転してしま...
-
パソコンで見た時とスマホで見...
-
ワードのこと教えてくれるとこ...
-
KADOKAWA電撃文庫のSafariで見...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードの行✖️文字数について。 ...
-
A4縦の2枚のワードをA3にするや...
-
A4サイズ横位置というのは ワー...
-
アップルに電話したけどやはり...
-
ワード、上下中央揃えにしたい...
-
ワードってスマホから見ると、...
-
スマホで横書きでもパソコンで...
-
txtのファイルから編集してもい...
-
スマホアプリのワードが横書き...
-
ワードのこと教えてくれるとこ...
-
スマホのワードが開かないのっ...
-
https://dengekitaisho.jp/nove...
-
表示かダウンロードのどちらか...
-
最近MacBookに変えました。 マ...
-
これってワードですか? 先方が...
-
KADOKAWA電撃文庫のSafariで見...
-
txtって、ページ番号振れないん...
-
スマホの文書って見え方がどう...
-
普通の場合は400字詰め換算でも...
-
これらアプリって購入済みにな...
おすすめ情報