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