Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11213 / 13646 ツリー ←次へ | 前へ→

【17403】パスワードを入力してからブックを開くようにしたい day aftar tomo 04/8/28(土) 20:33 質問[未読]
【17404】Re:パスワードを入力してからブックを開く... つん 04/8/28(土) 21:31 発言[未読]
【17420】Re:パスワードを入力してからブックを開く... こもれび 04/8/29(日) 1:39 回答[未読]
【17421】追伸 こもれび 04/8/29(日) 1:52 回答[未読]
【17422】Re:パスワードを入力してからブックを開... ひやかし君 04/8/29(日) 3:31 回答[未読]
【17427】Re:パスワードを入力してからブックを開... ちゃっぴ 04/8/29(日) 11:48 発言[未読]

【17403】パスワードを入力してからブックを開くよ...
質問  day aftar tomo  - 04/8/28(土) 20:33 -

引用なし
パスワード
   こんばんわ。
ブックを開く時に最初にフォームでパスワード入力画面として
正しいパスワードを入力した場合のみ開くようにしたいのですが、
いろいろ試してもうまく作動しません

パスワード付保存→済

ブックを開こうとすると
1.保護されていますのメッセージ&パス入力画面
↓(パス入力)
2.上書き保存するにはパスが必要ですのメッセージ&パス入力画面
↓(パス入力)
3.フォーム入力画面
↓(パス入力)
4.上記でパス入力キャンセルしても開いてしまう。

これをまず、最初にフォーム入力からに変更したいのと
どうもうまくフォームでのパスチェックが出来ていないようなのです。

記述してあるマクロ

1)This Workbook内

'==============================================================
Const パスワード = "11111111" '
Sub パスワード付保存()
  Dim retcode As Long
  retcode = save_bk(Workbooks("test.xls"), "c:\test.xls", パスワード)
  If retcode <> 0 Then
   MsgBox Error(retcode)
  Else
   MsgBox "保存されました"
   End If
End Sub
'==============================================================
Function save_bk(bk As Workbook, bk_path, Optional password = "") As Long
  On Error Resume Next
  save_bk = 0
  Application.DisplayAlerts = False
  bk.SaveAs Filename:=bk_path, password:=password, writerespassword:=password
  save_bk = Err.Number
  Application.DisplayAlerts = True
  On Error GoTo 0
End Function

Private Sub Workbook_Open()
  UserForm1.Show
End Sub

2)標準モジュール内

'======================================================================
Public Type output_data
  btn As Boolean 'true : okボタンがクリック False:Cancelボタンがクリック
  pass_str As String 'btnがTrueのとき、パスワード
  End Type
'======================================================================
Sub パスワード付読込()
  Dim pass_word As output_data
  Dim openbk As Workbook
  Dim retcode As Long
  pass_word = パスワード入力()
  If pass_word.btn = True Then
   retcode = open_bk(openbk, "c:\test.xls", pass_word.pass_str)
   If retcode <> 0 Then
     If retcode = 1004 Then
      MsgBox "パスワードが違います"
     Else
      MsgBox Error(retcode)
      End If
   Else
     MsgBox "ブックは、オープンされました"
     End If
   End If
End Sub

'========================================================================
Function パスワード入力() As output_data
'ユーザーフォームからパスワードを入力させる
'Output パスワード入力
  Load UserForm1
  With UserForm1
   .TextBox1.PasswordChar = "*"
   .Show
   パスワード入力.btn = .ok
   パスワード入力.pass_str = .TextBox1.Text
   End With
  Unload UserForm1
End Function
'========================================================================
Function open_bk(bkobj As Workbook, bk_path, Optional password = "") As Long
'指定されたパス名のブックをオープンする
  On Error Resume Next
  open_bk = 0
  Set bkobj = Workbooks.Open(Filename:=bk_path, password:=password, _
              writerespassword:=password)
  open_bk = Err.Number
  On Error GoTo 0
End Function


'*************************************

まーったくわからないので
お願い致します。

【17404】Re:パスワードを入力してからブックを開...
発言  つん E-MAIL  - 04/8/28(土) 21:31 -

引用なし
パスワード
   こんばんは。

私は、万年初心者なんで、絶対そうだ!とはよー言えないんですが、
day aftar tomo さんがなさりたい処理ってのは、元から不可能なんじゃないんかなあ?

ブックをパスワードを設定して保存
 ↓
開くときに、UserFormで作ったパスワード入力用フォームで
パスワードを入力して開く・・・

ってしたいんですよね?

でも、そのUserFormもそのブック内にあるんですよね?
それだったら、オープンされる前に、そのFormを表示させるってのは不可能なんじゃ・・・
ブックに書かれてるマクロって、そのブックのオープン時以降にしか実行されないと思います。
なので、エクセル側で表示されるパスワード入力のダイアログが表示される前に、UserFormを表示させるのは無理そうな気がします。

するんだったら、別のファイルから制御するしかないんじゃないかな?
別のファイルでフォームを出して、そこにパスワードを入力して、
それを、Openメソッドの引数に渡すとか・・・

だけど、エクセルでちゃんとパスワード入力ダイアログを出してくれてるんだから、それでいいんではないかと・・・それだけあかんの?

【17420】Re:パスワードを入力してからブックを開...
回答  こもれび  - 04/8/29(日) 1:39 -

引用なし
パスワード
   Sub auto_open()

'  パスワード入力のフォームを表示するコード
  pass_word =パスワード入力()
'
'
' この部分のコードは書けますよね?
' 
'
'
'  パスワードが一致せず、bookを閉じるコード
  Application.DisplayAlerts = False
  Application.Quit

End Sub

【17421】追伸
回答  こもれび  - 04/8/29(日) 1:52 -

引用なし
パスワード
   コードの先頭に

  application.Visible=false

を入れて、

パスワードが一致したときに

  application.Visible=true

にするともっといいかも

【17422】Re:パスワードを入力してからブックを開...
回答  ひやかし君  - 04/8/29(日) 3:31 -

引用なし
パスワード
   何でもかんでもVBAに頼らず、まずはEXCELの基本を勉強したら?
ファイル⇒名前を付けて保存⇒ツール⇒全般オプション⇒読み取りパスワードと
書き込みパスワードを入力⇒OK⇒名前を付けて保存(EXCEL2002の場合)
希望のフォームが出ないかもしれないけどほぼ、希望通りのことができるよ!
しかしこの掲示板は便利だな!
ろくに調べもしない教えて君やプログラムで飯食ってるPROに
真剣に解答やアドバイスがもらえるなんて。
俺にも誰か教えてくれ。
最近WindowsXP上のEXCEL2002でWb.VBProject.VBComponents
が使えないどうしたらいいんだ???

【17427】Re:パスワードを入力してからブックを開...
発言  ちゃっぴ  - 04/8/29(日) 11:48 -

引用なし
パスワード
   >何でもかんでもVBAに頼らず、まずはEXCELの基本を勉強したら?
>ファイル⇒名前を付けて保存⇒ツール⇒全般オプション⇒読み取りパスワードと
>書き込みパスワードを入力⇒OK⇒名前を付けて保存(EXCEL2002の場合)

Excel2002以降であればExcelの暗号化機能を利用するのがよいでしょうね。
ただ、その場合2000以前では開けなくなります。
(2000互換Verというのもありますが、脆弱性が指摘されており、
推奨されていません。)

Excel2000以前でやるならば、こもれびさんが提示したようにVBAでやった方が
いいでしょうね。

ただ、以下の点を念頭に置いたほうがいいと思います。
1. マクロを無効にして開かれた場合を想定する。
2. ブックをExcel以外でオープンされた場合を想定する。

一番確実なのは、保存しているブックの値全てを暗号化しておくことです。

>最近WindowsXP上のEXCEL2002でWb.VBProject.VBComponents
>が使えないどうしたらいいんだ???

[ツール]-[マクロ]-[セキュリティ]-[信頼のおける発行元] の
[Visual Basicプロジェクトへのアクセスを信頼する] のチェックを
オン にしてください。

11213 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free