• 締切済み

メッセージボックスを使い下記のようなものを作りたいのです

メッセージボックスを使い下記のようなものを作りたいのです BOOKを開くときに  読み取り専用で開きますか→はいORいいえ       →はいのときはBOOKを読み取りで開くよう設定したい       →いいえのとき→パスワードを要求   パスワード入力→”OK"or”NG"            OK→書き込みできる状態でBOOKをひらく            NG→パスワードがちがいます。→読み取り専用で開きます          で読み取り専用でBOOKを開く という具合に進めたいのですがアドバイスをおねがいします  

みんなの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.6

No.4のDexMachinaです。 > 書き込みが終わったあと又保護するときに 当該ファイルを開く時に『書き込みパスワード』などを使用すると、 確かに保護は解除されますが、それは「その場限りの一時的な もの」です。 ファイルアイコンをダブルクリック→ダイアログでパスワードを入力 →編集→上書き保存して閉じる(パスワードは特にいじらない) →再度アイコンをダブルクリック→再度パスワードが要求される ですので、「元のパスワードの再設定」のみなら、その操作を 省略してしまっても問題ありません。 もちろん、定期的なパスワード更新を行われている、ということなら 対応が必要と思いますが、念のため確認する次第です(汗) さて、コードですが・・・既にWendy02さんが提示された後ですので、 「パスワードが正しくなかった場合は、再度パスワードを要求」と したコード例を書いてみました。 なお、ここで要求するパスワードは、コード内へのパスワード記述を 避ける意味で、ファイルの書き込みパスワードそのものとしました。 また、InputBoxでは「*」でのマスクは行えませんので、マスクする 場合はユーザーフォームの自作が必要です。 Private Sub CommandButton1_Click() On Error GoTo エラー処理   Dim Xls As Excel.Application, Wkb As Excel.Workbook   Dim strMsg As String, strPwd As String   Const vbBlankLine As String = vbCrLf & vbCrLf   Const strPath = "C:\Documents and Settings\○○\デスクトップ\pwd.xls"   Set Xls = Me.Application   strMsg = "以下のファイルを読み取り専用で開きます:" & vbBlankLine & strPath   If MsgBox(strMsg, vbYesNo) = vbYes Then     Call Xls.Workbooks.Open(strPath, , True)   Else     Do       strMsg = "空白またはキャンセル時は、読み取り専用で開きます。"       strPwd = InputBox(strMsg, "書き込みパスワードの入力")       If strPwd = "" Then         Set Wkb = Xls.Workbooks.Open(strPath, , True)       Else         Set Wkb = Xls.Workbooks.Open(strPath, , , , , strPwd)       End If     Loop While (Wkb Is Nothing) And Len(strPwd)  'パスワードが違う限りループ   End If 終了処理:   Set Wkb = Nothing   Set Xls = Nothing   Exit Sub エラー処理:   Select Case Err.Number     Case 1004       strMsg = "パスワードが違います。" & vbBlankLine _           & "正しい書き込みパスワードを入力して下さい。"       MsgBox strMsg, , "確認"       Resume Next     Case Else       MsgBox Err.Number & ":" & Err.Description, , Me.Name & " CommandButton1"   End Select      Resume 終了処理 End Sub ・・・以上です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#4の補足を読みました。ご質問のロジックをコードにしました。パスワードを間違えても、開いてしまうのは、ロジックとしては疑問ですが、そのままにしました。2バイト文字は、失敗しやすいで、辞めたほうがよいです。ブックの保存のパスワード設定も可能です。 以下は、Excel2000用で開発したものですが、ひとつのブックを開けておいてから、別のブックを開けるためのマクロで、自ブックにパスワードの処理は、#3で書いたように無理です。なお、サブルーチンの引数は、セルに置いても読ませるようにしても可能です。 '//標準モジュール Sub OpenMacro()   'マクロで開く   Dim fName As String   Dim myPath As String   Dim oPsw As String   Dim rPsw As String   Dim wb As Workbook   oPsw = "a"   rPsw = "b"   'デフォルトパス   myPath = Application.DefaultFilePath & "\"   fName = "A.xls"   On Error Resume Next   Set wb = Workbooks(fName)   If Err.Number = 0 Then     MsgBox "ブックは開いています。", 64     wb.Activate     Set wb = Nothing     Exit Sub   End If   On Error GoTo 0   Call sbOpenMacro(fName, myPath, oPsw, rPsw) End Sub Sub SettingPassWord()   'パスワード付き保続   Dim oPsw As String   Dim rPsw As String   oPsw = "a"   rPsw = "b"   Call sbPWS(oPsw, rPsw) End Sub '//以下はサブルーチン Sub sbOpenMacro(ByVal fName As String, ByVal myPath As String, ByVal oPsw As String, rPsw As String)   Dim msg1 As Integer   Dim rdFlg As Boolean   Dim ret As Variant   Const vbYes = 6   Const vbNo = 7   msg1 = MsgBox("読み取り専用で開きますか", 35)   If msg1 = vbYes Then     rdFlg = True   ElseIf msg1 = vbNo Then     rdFlg = False   Else     Exit Sub   End If   ret = InputBox("パスワードを入れてください")   If StrComp(ret, oPsw, vbBinaryCompare) <> 0 Then     MsgBox "パスワードが違うので、読み取り専用で開きます", 64     rdFlg = True   Else     rdFlg = False   End If      Application.DisplayAlerts = False   Workbooks.Open myPath & fName, , rdFlg, , oPsw, rPsw   Application.DisplayAlerts = True End Sub Sub sbPWS(ByVal oPsw As String, ByVal rPsw As String) 'パスワード設定   Dim fName As Variant   Const sFILTER As String = "Excel(*.xls),*.xls"   If ThisWorkbook Is ActiveWorkbook Then     MsgBox "本ブックには、パスワード設定は出来ません。", 48     Exit Sub   End If   fName = Application.GetSaveAsFilename(, sFILTER)   If VarType(fName) = vbBoolean Or fName = "" Then Exit Sub   ActiveWorkbook.SaveAs fName, , oPsw, rPsw, True   MsgBox "パスワード設定をしたブッが出来ました。", 64 End Sub

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.4

> BOOKを開くときに ご質問の意図としては、「ある特定のブックを開くときに」、ということで よろしでしょうか。 そうであれば、Excelの基本機能で、概ねご希望を満たすのではないか と思いますので、その方法をご紹介します(なお、当方はExcel2003): 1)当該ブックを開く 2)Excelのメニューから「ツール(T)→オプション(O)」を選択 3)『オプション』ダイアログが開くので、『セキュリティ』タブを選択 4)『このブックのファイル共有の設定』の領域に『書き込みパスワード(M)』  の項目があるので、そこにパスワードを入力し、『Ok』をクリック 5)『パスワードの確認』ダイアログが開くので、先ほどと同じパスワードを  入力して『Ok』をクリック 6)ブックを保存して閉じる ・・・以上です。 これで、同ファイルを再度開くと、添付画像の『パスワード』ダイアログが 出るようになりますので、  読み取り専用で開くなら『読み取り専用(R)』ボタンを  上書き保存可能にするなら、正しいパスワードを入力してOkボタンを それぞれクリックすれば、所定のモードで開くことができます。 (ここでの『読み取り専用』は、「ファイルの上書きができない」という意味  で、セルへの入力などがロックされるという意味ではありません:  編集した上で、別名での保存は可能、ということです) なお、セルの編集ロックなども含めて制御したいということなら、VBAで 独自にコーディングすることになります。 (これも、特定ファイルに限定した前提での話になります) この場合は  a)パスワードの認証を行うためのExcelブック  b)上記ブックでの認証結果を元に、編集可否を制御されて開かれる   本体ブック という2つのブックを使用する構成にすることで、目的を達せられるかと 思います。 (後者のブックには、予め「読み取りパスワード」を設定しておいた上で、  前者のブックから開くときに、パスワードを指定して開く形にします) ※とりあえず、こちらは(今回は)流れのイメージのみということで・・・※

Rupan5833
質問者

補足

DexMachinaさんありがとうございます。 当方Excel2000を使用し、今はそのBOOKを保護しています。 が、書き込みが終わったあと又保護するときにパスワードの入力間違い("ん"を"n"ではなく"nn"と入力) が多発したため今回アドバイスをおねがいしました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

私は、せっかく回答されている人たちに水を指すのは、本意ではありませんが、この辺りは研究してきませんでした。理由は、自明なことだと思っていたからです。もし、私の考え方が間違っているなら、他の回答者の方は、解決策だけを書いてください。私も勉強させていただきます。 あくまでも、Excelのファイル設定として、既にPsswordやReadOnlyの設定されているという条件の上での話です。そうすると、ある意味では、パスワード解除の技術と似ているような気がします。シート解除のコードは案外見かけるものですが、Bookパスワードの解除は、外部からでないと出来ません。それと同じことだと思います。 BOOKを開くときに ・ 「読み取り専用で開く」選択 ・ 「パスワード入力」 といのは、Office自身のセキュリティとして、Excelのファイル側に、予め設定されていたとしたら、両方とも無理だと思います。 もちろん、言うまでもなく、自分自身のブックに、VBAなど(Ver.4マクロを含む)で、設定しても無理だと思います。Officeのセキュリティ自体は、ExcelのApplication 側の仕様ではなく、そうした機能が設定されているわけです。 ファイルを開く前に、Excel アプリケーション側がチェックして機能しています。だから、アプリの機能の後のVBAが先行できるとは思えません。別のアプリケーションや別の言語を用意しなければ、私にはできるとは思えないのですが。何も設定されていないブックに、「読み取り専用で開きますか?」と聞くのは、ナンセンスです。本体のExcelアプリケーションとは別に、オートメーションのエラーが返ることで、それをチェックすることは可能だとしても、内部からは不可能です。 ReadOnly(読み取り専用) は、ファイル側のAttribute ではなく、ファイル側のReadOnly だとしたら、それを読み出す方法があったのでしょうか。数日前に、ずっと調べてみたけれども、公開されていませんでした。Binary で調べるなどして、キーを見つけるぐらいしかないし、そういうことは、結局、クラックと同じ技術につながるものだと思います。 それから、外部言語としては、VBScriptですが、XPでは、暗号化することも可能ですし、パスワードを、「*(アスタリスク)」に変えることもできたのですが、Vistaなどでは、出来なくなっています。秘匿性のある言語を持っていない場合は、例えば、MSは、子ども向けのVB系のフリーの新しい言語(Small Basic)を出したそうですから、そんなもので試してみるしかないような気がします。 なお、設定のマクロ--セキュリティの「中」「高」「最高」という対策については、可能ですが、自主規制ですが、掲示板では公開することはしていません。それをプログラム(VBSを含む)に組んでも、他人の環境ではウィルス・チェックでおそらくは引っかかってしまいます。ファイル自身のプロパティのセキュリティの属性を変えないといけません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

基本形: 標準モジュールに。 Sub Auto_Open()  Dim res  res = MsgBox("read only", vbYesNo)  If res = vbNo Then   res = InputBox("pass")   If res = "correct" Then    Exit Sub   End If   MsgBox "wrong. read only", vbOKOnly  End If  Application.DisplayAlerts = False  ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly  Application.DisplayAlerts = True End Sub 勿論メッセージボックスでは,「パスワードを記入」させたりとかは出来ません。 プログラムのコアになる読み取り専用にする事や,メッセージボックスへの応答による分岐などについて参考にした上で,引き続き… ○ユーザーフォームを自作してパスワードの記入を***表示でマスクしたり, ○マクロそのものに判定用に正しいパスワードが記入されているのをオープンにしないようプロジェクトを表示用にロックしたり, ○マクロを無効で開かれたときはブックそのものが用をなさないようにあれこれ隠したり といった追加の細工について,さらに研究したり必要に応じて別途ご相談を投稿してみてください。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

BOOKオープン時に実行されるモジュール部(=準備されているもの)で記載になります。 「MSGBOX」は、 単にメッセージ表示するものと メッセージ表示しYES・NO選択をさせてその結果で処理続行させるものと あります。 また何か文字列を入力させる場合は「INPUTBOX」というのがあります。 ヘルプファイルで各コマンドの用途、使用例を確認してみてください。 開こうとするブックは、保存のときのオプションで 読取パスワード設定や書込パスワード設定とかしているのでしょうか?。

Rupan5833
質問者

補足

layyさんお世話になります。 今はBookの保護(当方EXCEL2000)を使用しております。 書き込みの時にパスワード入力で保護を解除、書き込んだあと改めてパスワード入力し、保護 ということをやっています。

関連するQ&A

  • メッセージボックスについて

    メッセージボックスが消えなくて困っています。 以下のように記述して、TextBox1に文字を4文字入力しないとメッセージボックスが現れますが、OKを押してもメッセージボックスがまた現れてしまい、s1_strの入力側のウィンドウに戻ることができません。 どうしたらいいでしょうか? Do s1_str = TextBox1.Text If (Len(s1_str) = 4 ) = False Then MsgBox("4文字入力してください",MsgBoxStyle.OKOnly, "エラー") End If Loop While (Len(s1_str) = 4 ) = False

  • パスワードの設定

    少し前に質問して回答をいただいたのですが私のソフトには下記に書かれているようなアイコンがありません 質問の内容は/社内メール(個人の場合も同じですが)などでファイルを添付する場合にパスワードを設定して外部から不正アクセスなど出来ないように設定したいのですが どのような操作でしょうか 送るファイルはエクセルやワードです ツールから全般オプションがありません バージョンが違うのでしょうか #1の方が言われるやり方もありますし、エクセル、ワードだったら、保存時にパスワード設定できますよ。 1.ブックを開きます。 2.[ファイル] メニューの [名前を付けて保存] をクリックします。 3.[ツール] メニューの [全般オプション] をクリックします。 4.[読み取りパスワード] ボックスまたは [書き込みパスワード] ボックスの、既存のパスワードを表す記号をダブルクリックします。 5.パスワードを変更するには、新しいパスワードを入力し、[OK] をクリックします。 パスワードでは大文字と小文字が区別されます。大文字と小文字を区別して、パスワードを正確に入力します。 パスワードを解除するには、Del キーを押して入力済みのパスワードを消去し、[OK] をクリックします。 6.パスワードを変更した場合は、新しいパスワードをもう一度入力し、[OK] をクリックします。 7.[保存] をクリックします。 8.同じ名前のブックがある場合は、必要に応じて [はい] をクリックし、既存のブックを保存するブックで置き換えます

  • Excelのパスワードについて教えてください。

    ExcelのBookを開こうとすると、パスワードの入力を要求する画面が出てくるのですが、そのパスワードが、2段階で入力するようになっているのですが、どのような設定をしたらこのように2段階の設定ができるのでしょうか? 〈例〉1回目のパスワードの要求→ OK → Enter    2回目のパスワードの要求→ Wave → Enter 上記のように、2回目に入れるパスワードは、1回目のものとは異なっています。 XPを使っています。

  • コンソールからのメッセージボックスをアクティブに

    Win32APIについて教えてください。 #include <iostream> #include <windows.h> int main() {   int i=0;   char mes[20]; // std::cin >> i;   std::sprintf(mes, "%dが入力されました", i);   MessageBox(NULL, mes, "test", MB_OK);   return 0; } をコンソールから実行するとメッセージボックスがアクティブになるのですが、コメントの部分を外してコンソールからの入力を受け取ると、コンソールがアクティブになってメッセージボックスがコンソールの下に隠れてしまいます。メッセージボックスをアクティブにすることはできるのでしょうか。 宜しくお願いします(WinXP、bcc32を使用しています)。

  • ログオン時に変なメッセージボックスが…

    対話式ログオンでCtrl+Alt+Delと押すユーザー名とパスワードを入力する前に「r」とだけ書かれた変なメッセージボックスが出てしまいます。 「OK」ボタンがあり、押すとユーザー名とパスワードの入力画面に移るのですが、毎回この画面が出て困っています。 CDでOSの修復をしましたが、一向に改善されません。 これはどうすれば修復できるのでしょうか? お分かりになる方が、いらっしゃいましたら教えて下さい。 OSはWINXP PRO SP1aです。 宜しくお願いします。

  • VB.NET メッセージボックスが隠れてしまいます。

    VB.NETでIEを起動して、フォームの操作と連携して IEのページを自動で操作するプログラムを作っています。 IEでWEBページのリンクをクリックしてページを移動する ごとにURLをチェックして、設定に該当した場合は メッセージボックスを表示して、このページで良いですか? という確認をしたいのですが、メッセージボックスが アクティブにならずにタスクバーを押さないと表示されません。 リンクをクリックした後は SetWindowPos(IE.HWND, 1, 0, 0, 0, 0, &H1 Or &H2 Or &H10) を実行して、IEを後ろに消してフォームを出すことは出来たのですが、 IEのウィンドウのタスクバーが押された状態のままで メッセージボックスがアクティブな状態で最前面に出てくれません。 Me.Topmost = True でもフォームは出るのですが、 メッセージボックスはその後ろに隠れてしまいます。 メッセージボックスを最前面に出す方法があったら教えて頂きたいです。 よろしくお願い致します。

  • 教えて下さい!(パスワード設定について)

    共有のエクセルを名前をつけて保存して読取パスワードを入れようとしたら、その部分がグレーになって入力できません。書き込みパスワードは入力できるのですが、この場合読取パスワードは設定できないのでしょうか?

  • asp.net メッセージボックスについて

    WEB開発を始めたばかりの初心者です。 メッセージボックスをダイアログで表示したいのですが理解に苦しんでいます。 javascriptで出来そうな感じなんですが・・・ 以下の2点のことをやりたいです。 できればコーディング例を教えていただければうれしいです。 javascriptと呼び出し側みたいな感じで。 どなたかご教授お願いします。 1.WEBコントロールに設定した削除ボタンのクリック時にメッセージを表示する。   「削除してもよろしいですか?」YES/NO 2.WEBコントロールに設定した更新ボタンクリック時に、VB側で項目の必須チェックを行い   未入力であればメッセージを表示する。   「○○は必須項目です。」OK

  • メッセージボックスのOKボタンをVBAでクリックさせたい

    EXCELの1つのブックに2つのマクロを組んでいます。 普段は1つ目のマクロを実行したあと、処理結果を確認してから 2つ目のマクロを動かしています。 ※1つ目のマクロ終了時に、完了のメッセージボックスが出ます。 この2つのマクロを、自動で処理するためのマクロを 作ろうとしていて、 1.1つ目のマクロを実行 2.処理完了のメッセージボックスのOKをクリック 3.2つ目のマクロを実行 という流れで処理しようと思っています。 今、メッセージボックスのOKボタンをVBAでクリックする方法がわからなくて 調べているのですが、お分かりになる方いらっしゃいましたら 教えていただけませんでしょうか。 例えば、1つフラグを作って、そのフラグが立っている時は メッセージボックスを出さないような制御は出来るのですが、 今回は、メッセージボックスをクリックする方法が 知りたいと思っています。 よろしくお願いいたします。

  • 空白セルのメッセージボックスでの知らせるマクロ

    はじめまして。下記のExcelについて教えてください。 セルA1からA10の間にデータが入力されているセル、入力されていないセルが混在している場合、データが入力されていないセルをメッセージボックスで知らせるマクロの作成の仕方を教えてください。 空白セルが2つある場合はメッセージボックスは2回表示されます。 ずっと考えていても、分からなくて。。。どうか教えてください。

専門家に質問してみよう