• 締切済み

エクセル97 フォームシートの保護をする時に出る"パスワード"をコード化させたい

「表示-ツール-フォーム」でボタンを作りました。 そして、マクロの自動登録で「シートの保護」を選び「パスワード:password」を設定し、更に「password」で保護解除をし、マクロ記録終了。 そして、各コードを「シートの保護」:ボタン3、「シートの解除」:ボタン2、に設定しました。 それらを実行させてみたのですが、特に「パスワード:password」を聞かれることなく一連の作業が終了してしまいました。 コードは以下のとおりです。 Sub ボタン2_Click() ' ' ボタン2_Click Macro ' マクロ記録日 : 2004/2/9 ユーザー名 : **** ' ActiveSheet.Unprotect End Sub -------------------------- Sub ボタン3_Click() ' ' ボタン3_Click Macro ' マクロ記録日 : 2004/2/9 ユーザー名 : **** ' ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub そこで、各ボタンのクリック時に、パスワードを聞いてきてくれるコードを書き加えたいのです。 わかる方がいらっしゃいましたら、是非教えてください!! コードに関して素人ですので、できたら、全体を通してコードを教えて頂ければ助かります。 いろいろ探してみたのですが、ギブアップです。 宜しくお願い致します。

みんなの回答

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

#1です。 > ファイルを開いた時に"パスの入力欄" 先の回答にも書きましたが、「名前を付けて保存」のオプションで書き込みパスを設定出来ます。 これは当然開いた時にパスを聞いてきます。 共有云々でないなら、似たような事をマクロでやった事はありますが、マクロ無効で開いた時の対策も必要になり、複雑になります。 大体こんな感じの処理 1.マクロ無効で開いた時用の「表紙」シートを作っておき、ブックを保護する。 2.マクロ有効で開いた場合は、Auto_Openを使いInputboxを出す。 3.保存しておいたパスとマッチさせ、OKなら「表紙」を隠して、データシートを表示する。

mipomipo
質問者

補足

お世話になります。 >「名前を付けて保存」のオプションで書き込みパスを設定出来ます。 はい、おっしゃる通りです。 ただ、これを設定して、ファイルを上書き保存等で閉じようとする時「上書きできないので、別名保存してください」というメッセージが出ます。 それが煩わしいかと思い、何か方法があればと思いました。 時間もないので、今回はオプションでパスを設定します。 1~3の処理に挑戦しましたが、コードの勉強からやらねば・・・というかんじです。 回答内容を参考にさせていただきます。 ありがとうございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

#1です。 ブックの共有をした事が無いので、共有の詳細は解かりませんが、ヘルプで「共有ブック, 使用できない機能」を調べると、そもそもパスワードの設定、変更、削除自体が出来ないとあります。更に、マクロやオブジェクトの挿入、削除も制限があるようです。 開けるけど、編集は何らかの制御をしたいって事だとは思いますが、いま1つ実現したい事が理解出来ません。 単純に最初に保存する時に「名前を付けて保存」のオプションで、読み取りパスワードや書き込みパスワードを設定して、書き込みを許可する人に教えておくとかではダメなのでしょうか? どうしてもマクロで保存を制御したいなら、Thisworkbook の BeforeSave をこんな感じにして保存時にパスを聞くとか。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim msgResult  Cancel = True  msgResult = Application.InputBox("書込みパスは?", "書込み", Type:=2)  If msgResult = "SAVEOK" Then Cancel = False End Sub 但し、マクロを使う場合は「マクロを無効」で開かれたらどうにもなりませんよ。

参考URL:
#1です。
mipomipo
質問者

補足

ブックの共有化については、了解です。 回答No.2ですが、できればファイルを開いた時に動作をさせたいかと・・・ 質問内容がわかりづらくてすみません。 イメージはこんなかんじです。 1.ファイルを開いた時に"パスの入力欄""書き込みボタン""参照ボタン"があるメッセージボックスを表示させる。…(a)  又、サブタイトルか何かに"「書き込みパスを入力するか、参照ボタンをクリックして下さい。」"というようなコメントがついたら解かり易いかと思います。 2.パスを入力してがokだったら、書きこみができる状態で開く。  パスが違っていたら、「パスが違います。正しいパスを入力してください。」というメッセージが出て、再度a.のメッセージを表示させるようにする。  参照ボタンで開いた場合には、書きこみが出来ない状態で開く(参照だけを目的に開く)。 いかがでしょう...実現できそうですか? 専門用語をわかっておらず、素人用語になってしまっていたらご容赦ください。 宜しくお願い致します。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

意図した回答になっているか解かりませんが、、、 Sub ボタン1_Click()  On Error Resume Next  Application.Dialogs(xlDialogProtectDocument).Show End Sub これでボタン1つで設定も解除も出来ますけど、意味が違いますか?

mipomipo
質問者

補足

ご回答ありがとうございました。 わかりやすく書いていただいて、すぐに操作できました。 ところが、実際にやってみたところ、更に問題発生してしまいました。 このボタンをつけたファイルを同時編集できるようにしたくて「ブックの共有化」をさせようとしたら、このボタンを作ることができませんでした。 (一部では閲覧のみ、一部では同時編集ができるようにしたい) ということで、再度お聞きします。 いづれかの以下のような設定ができたらよいのですが・・・ 1.「同時編集」ができ、「保護するボタン」と「保護解除のボタン」をわけて設定する 2.「書き込み許可するパスワード付ボタン」と、「書き込み完了(=書き込み不可)するボタン」をわけて設定する 3.或いは「同時編集」ができ、「書き込み許可するパスワード付ボタン」を設定し、ファイル保存をしたら、常に「書き込み不可状態」になる もしくは、papayukaさんの発想でよい方法がありましたら、教えて頂ければと。。。 図々しいお願いですみませんが、宜しくお願い致します。

関連するQ&A

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • エクセルシート保護のパスワード【文字コード】

    マクロを使って、シート保護を外そうとしています。 文字コードで詰まってしまいました。 たとえば、シートをパスワード『11』で保護したとします。 pass = "11" ActiveSheet.Unprotect Password:=pass もちろん上記で解除できます。 pass = Chr(49) & Chr(49) 上記に変更しても解除できます。(「1」の文字コードが49なのでこれはわかります。) pass = Chr(33) & Chr(57) ところが、上記でも解除が出来てしまいます。(つまり、「!9」で解除できます。) なぜなのでしょうか。。。。

  • シートの保護について

    特定のセル("C3:I3")を編集不可にしたいのですが、 下記プログラムにするとすべてのセル(シート)が保護されてしまいます。 どこがおかしいのでしょうか。 Private Sub CommandButton1_Click() ActiveSheet.Unprotect ・・・・・・・・・・ Range("C3:I3").Locked = True ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub

  • エクセル シートを保護してる時のセル結合

    エクセル2010を使用しています。 仕事の成果を一定の様式に記入してもらいます。書式、関数などを変更してもらいたくないのでシートに保護をかけました。 記入してもらうところだけセルのロックをはずし入力OKに設定しました。 しかし、シートの保護をかけるとロックをはずしててもセルの結合はできないんですね。なので、過去の質問からシートの保護がかかっていてもマクロですべての操作をしようできるというマクロ↓を参考にしてみました。 Sub seru() ActiveSheet.Protect UserInterFaceOnly:=True End Sub これと、セルを結合するマクロ↓を考えたのですが、どのように2つをくっつけたらいいのかがわかりません。 If TypeName(Selection)="Range"and Selection.Cells.Count>1 Then Selection.Merge ActiveSheet.Protect,AllowFormattingCells:=True End If 何かぬけているのかマクロを実行しても全く働いてくれません。 どうかよろしくです。

  • エクセル2000で動いたマクロが2003で実行時エラー!

    会社のWindows2000、エクセル2000では問題なく動いたマクロですが Sub test01() ActiveSheet.Protect , Password:="XX", UserInterfaceonly:=True End Sub これを自宅のWindowsXP エクセル2003でうごかすと実行時エラーがでます。 「実行時エラー448 名前付き引数が見つかりません。」となってしまうのです。 Sub test02() ActiveSheet.Protect , UserInterfaceonly:=True End Sub とすれば動くのですが、そうするとシートに保護がかかっているのでパスワードを聞いてくるようになってしまいます。 エクセル2003ではどのように書くべきなのでしょうか?できれば2000も2003も共通の記述でOKになるようにしたいのですが。 ご教示をお願いします。

  • エクセル:常に保護をかけるがマクロは有効

    シートに、マクロ実行時以外保護をかけておきたいです。 (マクロで、ロックをかけたセルを操作したいので) 「マクロを記録する」で保護をかける操作を記録してもらったところ、 「許可する操作」は以下の記述で実行されるようです。 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True ここに「マクロからの変更は有効」の UserInterfaceOnly:=True を加えた以下のコードは、 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ AllowInsertingColumns:=True, AllowInsertingRows:=True, _ AllowDeletingColumns:=True, AllowDeletingRows:=True, UserInterfaceOnly:=True どのSubに記述すればよいでしょうか。 ワークシートに直接書込むんですよね? Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub に書いてみたら一時期正常に動いていたと思うのですが、どうやら勘違いだったみたいです。 ActiveもChangeも違うようなのですが(なぜかどちらも一時は動いたような…)。

  • Excel VBAで他のシートを印刷するとき

    シート1からシート2を表示しないで印刷したいんですが下の記述だと一瞬ですがシート2が表示されます、どのようにすればシート1のままシート2を印刷することができるのでしょうか、よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2004/7/23 ユーザー名 : H ' Sheets("Sheet2").PrintOut Copies:=1, Collate:=True End Sub

  • エクセルのシート保護をマクロのボタンで

    ご教示下さい。 エクセルでのシート保護の設定をボタン一つで出来るようにと思い、マクロの自動記録で作成してみましたが、設定したはずのパスワードが記録されていません。 シート保護の解除にパスワードの入力が必要なようにする、シート保護のマクロは出来るでしょうか?。 どなたか、よろしくお願いいたします。

  • EXCEL VBAで条件付き保護について

    VBA初心者です、よろしくお願いします。 列Eでオートフィルタを使用可能と設定したいので、下記のようにしましたが、「シートの保護を設定」のステップを終えた後オートフィルタも使用できません。 「AllowFiltering:=True」でEXCELのオートフィルタの使用にチェックを入れた状態になると考えていましたが、思うようになりませんでした。 「シートの保護を設定」のステップがおかしいと思うのですが、わかりません。 教えてください。 ------------------------------------------------------ Private Sub Auto_Open() '一旦、シート保護を解除 ActiveSheet.Unprotect Password:="AAA" 列Hのデータを重複データを無視で列Oに抽出 セルH2は「入力規則-リスト」~列Oのデータを使用   ・   ・   ・ ' シート保護を設定 ActiveSheet.Protect Password:="AAA", UserInterfaceOnly:=True, AllowFiltering:=True End Sub

  • エクセル マクロ コピー→シート保護解除→貼付

    いつもお世話になっております。 マクロ勉強中の者です。 2つの別ブックのシート(互いに任意)を同時に開いている前提での作業です。 (1)あるブックのシート(任意)は,シート保護が施されています。このシートのシート保護の解除をします。 (2)(1)で示したブックとは別のブックのシート(任意)に,次のようなマクロを設定してあり,指定した範囲のコピーを行います。 Sub コピー() コピー Macro Range("E6:AI73").Select Selection.copy End Sub (3)次に,(1)で示したブックのシート(任意)に次のようなマクロを設定してあり,先ほどコピーした内容を貼り付けます。 Sub 貼り付け() Range("E6").Select ActiveSheet.Paste  ActiveSheet.Protect End Sub (4)(1)で示したシートには,(2)で行ったコピーの内容を貼り付け,シート保護された状態で作業が終わります。 この一連の作業の中で,(1)の作業を省けないかと考えています。つまり, 別ブックのシートを2枚開いている状態で, ◎あるブックのシートの内容をコピー(範囲指定あり) →◎別のブックのシートに,シート保護解除して(2)でコピーした内容を貼り付け,(セル指定あり)シート保護して終了 (3)で示したマクロに ActiveSheet.Unprotect を付け加えて実行してみたのですが,うまくいきません。エクセルの性格上,「貼り付け」の前にシート保護解除の動作が入ることで,コピーした内容が失われ?て貼り付けることができないのかな?と感じているのですが,どなたかご教授いただけると嬉しいです。 エクセルのバージョンは,2016になります。

専門家に質問してみよう