こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ロックをかけたファイルにリンクしてあるファイルを開きたい

Excelで簡易データベースを作成しています。入り口はひとつにしようと思い、メニューのブック以外にはロックをかけ、メニュー上のコマンドボタンから各ファイルを開こうと思っていますが、そのメニュー以外のファイルは互いにリンクしていて、リンクの更新時にもPass要求のBoxが開いてしまいます。リンク先のPassもVBAから入力できるようにならないでしょうか?
Sub FILEAopen()
Dim FILENAME As Variant
FILENAME = "C:\A.xls"
Const PSW As String = "APASS"
With Workbooks.Open(Filename:=FILENAME, updatelinks:=3, Password:=PSW, writerespassword:=PSW)
.Unprotect (PSW)
End With
End Sub
これで”A.xls"は開けるのですが、リンク先の”B.xls”もブックの保護をかけているため、パス要求のダイアログが開いてしまいます。Aのリンク先の”B.xls”も自動で開きたいのです。
どなたか宜しくお願い致します。

投稿日時 - 2008-01-08 01:15:43

QNo.3659921

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

対処療法ですが、A.xlsを開く前にB.xlsを開いておくというのはどうでしょうか?

Sub openBook(file As String, pw As String)
Application.ScreenUpdating = False
Workbooks.Open Filename:=file, updatelinks:=3, Password:=pw, writerespassword:=pw 'オープン
Windows(file).WindowState = xlMinimized '最小化
Application.ScreenUpdating = True
Workbooks(file).Sheets("Sheet1").Protect UserInterfaceOnly:=True 'Sheet1はvbaから変更可能へ
End Sub

Sub closeBook(file As String)
Workbooks(file).Close SaveChanges:=True
End Sub

というのを標準モジュールに用意していおて、Aを開く時に前もってA.xlsを開く。

openBook "B.xls", "pw"
openBook "A.xls", "pw"

閉じる時は順番は関係ない。

closeBook "A.xls"
closeBook "B.xls"

ちなみに、UserInterfaceOnlyは、手動では変更ができないが、vbaからは変更できるというオプションです。
ただし、Excel2000では、シート単位でしか設定できなかったので、上ではSheet1を指定していますが、他のバージョンはわかりません。

投稿日時 - 2008-01-09 19:36:08

お礼

fumufumu_2006さん、どうもありがとうございます。発想の転換ですね!先に開いておけばリンク更新の表示が出ない事がすっかり抜けていました。やはりやりたい事ばかり考えていると考え方が狭まってしまいますね。ちなみに、次のようにコードを書きました。
Sub FILEAopen()
Application.ScreenUpdating = False
Dim FILENAMEA,FILENAMEB As Variant
FILENAMEA = "C:\A.xls"      '編集したいファイル
FILENAMEB = "C:\B.xls"       'Aのセルに関数でリンクしているファイル

Const PSW As String = "ABPASS"
With Workbooks.Open(Filename:=FILENAMEB, updatelinks:=3, Password:=PSW, writerespassword:=PSW)
.Unprotect (PSW)
End With
With Workbooks.Open(Filename:=FILENAMEA, updatelinks:=3, Password:=PSW, writerespassword:=PSW)
.Unprotect (PSW)
End With

Workbooks("B.xls").Close False  'リンク元のファイルのみ閉じる(編集はしない)

Application.ScreenUpdating = True
End Sub

B.xlsはあくまでもA.xlsとセル単位でリンクしているだけで、Bのデータが更新された後に、Aを開いて時にそれが反映されれば良いので、更新さえできれば閉じてしまいます。
おかげで出来ました。本当にありがとうございました。

投稿日時 - 2008-01-11 23:28:24

あなたにオススメの質問