• 締切済み

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

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”も自動で開きたいのです。 どなたか宜しくお願い致します。

みんなの回答

回答No.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を指定していますが、他のバージョンはわかりません。

itashin
質問者

お礼

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を開いて時にそれが反映されれば良いので、更新さえできれば閉じてしまいます。 おかげで出来ました。本当にありがとうございました。

関連するQ&A

  • ACCESSのVBAからExcelのセルから読めたのですが、書く方法を教えてください

    下記の方法でCell(1,1)、から読むことができました そこで今度書き込みなのですが With xlBk.Worksheets("Sheet1")    'Debug.Print .Cells(1,1)    .Cell(1,2) = "data" End With としても、エクセルシートには書かれていないのですが 書く方法を教えてください ただ、下記の Open(Filename:=strFile, UpdateLinks:=0) はエクセルをOpenする時 「このブックは他のデータソースへのリンクがふくまれています」 とメッセージがでるので、UpdateLinks:=0、と入れています よろしくおねがいします '--------------------------------- Dim xlApp As Excel.Application Dim xlBk As Excel.Workbook Dim strFile As String strFile = "C:\Sample\Book1.xls" Set xlApp = CreateObject("Excel.Application") Set xlBk = xlApp.Workbooks.Open(Filename:=strFile, UpdateLinks:=0) With xlBk.Worksheets("Sheet1")   Debug.Print .Cells(1,1) End With xlBk.Close False xlApp.Quit Set xlApp = Nothing '----------------------------------

  • EXCELマクロでブック内のリンク状態を取得する方法

    ブックが外部参照していると、取込時にエラーになってしまうソフトを使っています。 事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。 外部参照、リモート参照ともに更新せずにブックを開くのは下記の方法でできそうなのですが、そこから先の方法が解らず困っています。 Workbooks.Open Filename:="C:\My Documents\リンク元.xls",UpdateLinks:=0 =[リンク先.xls]Sheet1!$A$1+[リンク先.xls]Sheet1!$A$2 条件1:このリンク先は「パス」も「ファイル名」も変動します。 条件2:無条件で値貼り付けはできません。

  • 他のExcelブックのモジュールに構造体を渡すには

    Book1.xlsのaモジュールから構造体を引数としてBook2.xlsのbモジュールを呼び出したいのですが、Book1.xlsのVBEのツールメニューの参照設定でBook2.xlsを参照しましたが、Book1.xlsのaモジュールを実行するとCall b(t)のtの箇所で「ByRef 引数の型が一致しません」というコンパイルエラーになります。 他のブックのモジュールに構造体を渡すにはどのようにすればよいのでしょうか。 よろしくお願いしたます。(OS:WindowsXP Excel2003) ---Book1.xls--- Option Explicit Public Type TT  name As String End Type Sub a()  Dim t As TT  t.name = "ABC"  Call b(t) End Sub ---Book2.xls--- Option Explicit Public Type TT  name As String End Type Sub b(t As TT)  MsgBox t.name End Sub ---------------

  • マクロでリンクを更新しないで開く

    エクセル2013です。 リンクを更新しないで開く ネットで調べて Workbooks.Open Filename:="C:\作業用フォルダ\更新データ名.xls", UpdateLinks:=0 に行きつきました。 私の構文は MsgBox "編集したいデータを選択してください", vbInformation, "手順" MsgBox "ファイル選択画面を開きます", vbInformation, "ファイル選択" 選択ファイル = Application.GetOpenFilename If 選択ファイル = False Then MsgBox "中止します", vbExclamation Exit Sub 'キャンセル選択時 Else Workbooks.Open 選択ファイル End If というふうに、作業者が開くbookを選択する為、対象のドライブが固定できません Workbooks.Open Filename:="C:\作業用フォルダ\更新データ名.xls", UpdateLinks:=0 をどのように応用すればいいかわからず いろいろ試したのですが駄目です。 (上記構文中のcはcドライブの事だと思っています?) とりあえず★の部分を2行追加して MsgBox "編集したいデータを選択してください", vbInformation, "手順" MsgBox "ファイル選択画面を開きます", vbInformation, "ファイル選択" 選択ファイル = Application.GetOpenFilename If 選択ファイル = False Then MsgBox "中止します", vbExclamation Exit Sub 'キャンセル選択時 Else Workbooks.Open 選択ファイル Application.AskToUpdateLinks = False '★メッセージを表示しない ActiveWorkbook.UpdateLinks = xlUpdateLinksNever '★リンクの自動更新を行わない End If のようにしてみたのですが ブック内の一部のリンクはすぐに更新できません 「更新」「接続」 と警告メッセージが出てしまいます。 アドバイスをお願いいたします。

  • ExcelでBookを開くPasswordにエラーを出さないには

    Sub Dim FileName As String FileName = "D:\集計表.xls" Dim Sheet_Name As String Dim Book_Name As String Workbooks.Open FileName:=FileName Sheet_Name = "Sheet1" Book_Name = ActiveWorkbook.Name Workbooks(Book_Name).Sheets(Sheet_Name).Select Range("A1").Select End Sub 上記の構文でBookを開く時に「Password」を要求して開くようにしています。 ただ、Passwordを間違えた時は「実行時エラー1004」とな、「デバック」するか「終了」するしかありません。 デバック」・「終了」をせずに再度Password入力に戻るにはどの様にすれば良いでしょうか。

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • VBAでのファイルの開き方について

    いつもお世話になっております。(エクセル2010を使用) エクセルVBAを学習中の者です。 ダイアログボックスを表示してファイルを開く・・・というコードを記述しているのですが、分からない点があるためご指導をお願いします。 Sub Sample1() Dim openFileName As String openFileName = Application.GetOpenFilename filefilter:="Microsoft Excelブック,*.xls?" Workbooks.Open Filename:=openFileName End Sub を実行するとコンパイルエラーの構文エラーが表示されます。 Sub Sample2() Dim openFileName As String openFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open Filename:=openFileName End Sub を実行すると正常に動作します。 私の現在の知識ではSample1も正常に動作するはずなんですが・・・ (※コードはVBEをコピペしています) 両者の違いはなんでしょうか?(※スペルの間違いは無いとは思いますが・・・) どうぞよろしくお願いいたします。

  • エクセルVBAで、PDFファイルを開きたい

    セルに入力した値のブック(xls)を開く場合、 以下となりますが、↓ Sub セルに入力したブック名のブックを開く() ブック名 = Cells(1, 2) 'B1セルの値を取り出す Workbooks.Open Filename:=ブック名 & ".xls" '指定されたブックを開く End Sub これでPDFファイルを開きたいです。 記述をどうしたらよいでしょうか。 目的はPDFファイルの検索/照会をxlsにてしたいのです。 お手数ですがお願いいたします。

  • 複数のファイルのsheet1だけをまとめるには

    sub UsedRangeをOffsetする() Dim rng先 As Range Dim PathMacrobook As String Dim Name元book As String Dim 元Book As Workbook Dim 元Sheet As Worksheet Set rng先 = Workbooks("BOOKALL.xls").Worksheets(1).Range("A2") PathMacrobook = ThisWorkbook.Path & "\" Name元book = Dir(PathMacrobook & "*.xls") Do While Not Name元book = "" If Name元book = ThisWorkbook.Name Then ElseIf Name元book = "BOOKALL.xls" Then Else Set 元Book = Workbooks.Open(PathMacrobook & Name元book) For Each 元Sheet In 元Book.Worksheets With 元Sheet.UsedRange .Offset(1).Copy rng先 Set rng先 = rng先.Offset(.Rows.Count - 1, 0) End With Next 元Book.Close False End If Name元book = Dir() Loop End Sub このコードではフォルダにあるブックのすべてのシートをBOOKALLのシート1に 上書きコピーしてしまう事がわかりました。 やりたい事 オープンするブックのsheet1だけを、.end(xlup)を使って一覧にしたいです。。 どの様にしたらよいでしょうか?

  • インプットボックスからファイルを開くようにしました。しかし、すでに開い

    インプットボックスからファイルを開くようにしました。しかし、すでに開いているか確認する項目がうまく作動しません。どのように記述するか教えて頂けませんでしょうか。 Sub Macro1() Dim wb As Workbook Dim psw As Boolean Dim fil As String fil = InputBox("ファイル名入力") For Each wb In Workbooks ’すでに開いているか確認。二重に開くのを防止 If wb.Name = "fil.xls" Then ’ここの部分がうまく作動してくれません。 psw = True Exit For End If Next wb If psw = False Then Workbooks.Open Path & "C:¥" & fil End If End Sub

専門家に質問してみよう