同じファイルが既に開いていた場合の対処方法

このQ&Aのポイント
  • 既に開いているファイルと同じファイルを開かないようにする方法を教えてください。
  • accessを使用してexcelファイルを読み込み専用で開き、指定したシートも開いています。しかし、同じファイルが既に開かれている場合、2つ目のファイルも開いてしまいます。どのようにして2つ目のファイルを開かないようにすることができますか?
  • 既に開かれているファイルと同じファイルを開かないようにしたいです。何か対処方法があれば教えてください。
回答を見る
  • ベストアンサー

同じファイルが既に開いていたら開かないようにしたい

同じファイルが既に開いていたら開かないようにしたい accessから下記のコードでexcelファイルを読み込み専用で開き、 指定したシートを開いています、 ですが、既に同じファイルが開いていた場合更にもう1枚開いてしまい、 同じファイルが2枚開いている状態になってしまいます、 何か1文を足して2枚目を開かせない様にすることが出来ると思うのですが、 どんな一文を入れたら良いか教えてください (既に開いているか気をつけて開く、と言うのは無しな方向で) oApp.Workbooks.Open Filename:= _ "■■■■■■■■■■■■", ReadOnly:=True oApp.Worksheets("■■■■■■■").Select よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>何か1文を足して というわけにはいかないかもしれまえんが、 以下のサイトにファイルが既に開いているかの 関数を作成しておられます。 http://www.f3.dion.ne.jp/~element/msaccess/AcResTipsWarehouse1.html#TemplateExcelAuto 関数名はAleadyOpenedです。ほぼこれで対応 できると思いますが。

kisara-gi
質問者

お礼

お答え頂きありがとうございました やはり1文でと言うのは無理でしたか・・・どうやら考えが甘かったようだと理解できました もしかしたら楽に済むのではないかと思ったのですが、素直に教えて頂いたAleadyOpenedを学びます ご考慮頂きありがとうございました

その他の回答 (2)

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

不思議ですね? 通常エクセルは今開いているブックを開き直そうとすると,今現在開いているエクセルブックの編集を破棄して開き直したブックを生かすか,それとも開くのを止めるか確認を求めます。 先に開いたエクセルで特に編集を行っていなければ,問答無用で単に開き直して終わってしまい「2つ目が開く」事はありません。readonlyで開いていてもこれは変わりません。 若しくは,今開いているブック(仮にBook1.xls)と同じ名前の別のブック(別の場所にあるBook1.xls)を開こうとすると,単純にエラーを出して開かせてくれません。 しかしご相談で「2つ開いてしまう」という「事実」があるのだとしたら,即ちご相談のマクロの掲示されていないもっと前段で,エクセルアプリケーション(oApp)が「そのマクロを実行するたび,毎回新たなインスタンスとして何個も起動されている」状況が想定されます。 そう考えると対処としては,今のマクロの前段をもっと見直して「最初に1つ起動したExcelアプリケーションを大事に使い廻す」マクロに修正する事が考えられます。 確実に一つのExcelアプリケーションオブジェクトの配下で同じブックを開くようにすれば,最初にご説明したように「2つ開いてしまう」事は起こりません。 それとももしかして,よくよく見てみたら「事実は違いました」といった事でしたら,改めて正しい状況を添えてご相談を投稿し直してみてください。

kisara-gi
質問者

お礼

読み違いをしていたら申し訳ないのですが、質問の現象は起きないと言う事でしょうか? こちらのOSとVerを書き忘れたゆえの相違かもしれませんが一応下記のコードでボタンとファイルをご用意いただければ再現できると思います OSWIN2000 EXCEL,ACCESS共にVer.2003 Private Sub コマンド15_Click() On Error GoTo Err_コマンド15_Click Dim oApp As Object Set oApp = CreateObject("Excel.Application") oApp.Visible = True On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open FileName:="\\■■■■■■■.xls", ReadOnly:=True oApp.Worksheets("■■■■").Select Exit_コマンド15_Click: Exit Sub Err_コマンド15_Click: MsgBox Err.Description Resume Exit_コマンド15_Click End Sub このコードで実行しますとクリックを踏む度に新しいウインドウで同じファイルを開いていってしまいます

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に fn = "■■■■■■■■■■■■" On Error Resume Next CreateObject("Scripting.FileSystemObject").MoveFile fn, fn If Err Then   MsgBox fn & "開いています。" Else   MsgBox fn & "開いていない。" End If

kisara-gi
質問者

お礼

なるほど、ボックスで状態の確認を表示するのですね、 コードの貼る位置が悪いのか最初から開いていますになってしまうのですが 何が足りないのか良く考えて見ます こちらも参考にさせていただきたいと思います ご考慮頂きありがとうございました

関連するQ&A

  • Excel VBAで異なるファイル間のコピー

    異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。

  • マクロ:読みとり専用の場合、一部シートを隠す

    エクセルを開くと、パスワードを入力OR読み取り専用の小窓を出します。 パスワードを入力すると、エクセルを操作でき、 読み取り専用の場合は一部シート、たとえば2シート目以降は隠す、というふうにマクロでできないでしょうか。 読み取り専用等の設定はできるのですが、 特定のシートを隠す設定が、毎回手間がかかるため、マクロにしようと思った次第です。 IFを使ってマクロを組もうとしたのですが、 つなげ方がよくわからず、ご教示頂きたいです。 よろしくお願いします。 ファイル名:#### Sub OpenWorkbook(エクセル1)  WorlBooks.Opne FikeName:="####",PassWord:="ABCDE"  WorkBooks.Open FileName:="#####",ReadOnly:=True Worksheets("Sheet2").Visible = False End Sub

  • ファイルが既に開いているかどうかを取得するには

    Sub Sample1() Dim App As Object Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = "C:\Users\test.xlsm" With App .Workbooks.Open Filename:=MyFileName .Visible = True If .ReadOnly Then MsgBox "既に開いています" App.Quit '既に開いているのなら、閉じる End If End With End Sub このようなコードを作ったのですが、どうやらIf .ReadOnly Thenの部分が間違っているようです。 エラーになります。 既にファイルが開いているか、読み取り専用かどうかを取得するコードをご教授ください。

  • アクセスのMDBファイルを他のユーザーに強制的に読

    アクセスのMDBファイルを他のユーザーに強制的に読み取り専用で開かせる方法は? 私が作ったファイルを他の人にメールで送って その人はローカルで保存し、共有ではなく一人で使う場合、 読み取り専用にしたいです。 エクセルなら Private Sub Workbook_Open() Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, ReadOnly:=True End Sub でできましたが アクセスの場合は どうすればいいでしょうか? ヴァージョンは2003です。 よろしくお願いします。

  • どちらでしょうか?

    Sub test() Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, ReadOnly:=True End Sub エクセルなのですが、 上記のコードは、既に開いている自身のファイルを読み取り専用モードにするのですか? それとも 新規に自身のファイルを開きなおして、その時に読み取り専用モードで開くのか どちらでしょうか? 同じコードを実行しているのに 自身のファイルをそのまま読み取り専用モードにするパターンと 「ファイル名は既に開いています。 2重に開くと、子rまでの変更内容は破棄されます。ファイル名を開きますか?」 と聞かれる場合があります。 結局どちらも同じことなのでしょうか?

  • ACCESS VBA からのワードファイルの起動

    ACCESS97を(未だに!)使用しています。 これから、VBAでワードの既存ファイルを起動したいと考えています。その際、ワードを新規に立ち上げることなく、表示して編集したいわけですが、どうしても新規に起動してしまします。 これまで試したのは、 Dim oApp As Object Set oApp = GetObject("", "word.Application") oApp.Visible = True oApp.Documents.Open FileName:="C:\filename.doc" および Dim oApp As Object Set oApp = CreatObject("word.Application") oApp.Visible = True oApp.Documents.Open FileName:="C:\filename.doc" などです。 しかし、すでにワードが起動していても、どうしても、新たにワードを立ち上げてしまいます。 解決策はあるでしょうか? ちなみにエクセルだと、GetObject で既に起動しているエクセルに追加でアプリが表示されます。

  • エクセルVBAで、複数のブックからデータベースを作りたい

    こんにちは。VBAをはじめたばかりの者です。 変数の使い方で教えていただきたいことがあります。 Dim myFLName As String myFLName = ThisWorkbook.Path & "\001.xls" Workbooks.Open Filename:=myFLName, ReadOnly:=True Workbooks("dbase.xls").Activate Range("A2").Select ActiveCell.Value = 1 ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R3") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("C2") ActiveCell.Offset(, 1).Select ActiveCell.Value = Workbooks("001.xls").Worksheets(1).Range("R2") ActiveCell.Offset(1, -3).Select 001.xls~(連番でない)200.xlsくらいまでのファイルがあり、 同じフォルダにdbase.xlsを作って1ブックから1レコードになるようにしたいと 思います。 こんな感じで1行目はできたのですが、2行目の1列目に「2」を入れ、 2列目からは001.xlsの次のブックを開いてセルの中身をコピーしたいのです。 変数の使い方がよくわからないのですが、教えていただけますでしょうか。 よろしくお願いいたします。

  • ExcelのOpenTextで作ったシートのコピー

    Excel2010のVBAでテキストファイルを読み込むと新しいブックに読み込まれるので、新しいブックのシートをVBAのコードがあるブックにコピーしたいのですが CSVファイル読み込み時に使う Workbooks.Open の場合には  Dim wb As Workbook  Set wb = Workbooks.Open(Filename:="C:\test\test1.csv")  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False のような感じでコピーすることができたのですが テキストファイル読み込み時に使う Workbooks.OpenText の場合には  Dim wb As Workbook  Set wb = Workbooks.OpenText Filename:= _    "C:\test\test1.txt", _    Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _    , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _    Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), _    Array(9, 2)), TrailingMinusNumbers:=True  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False とすると、OpenTextの箇所で「Workbooks.OpenText Functionまたは変数が必要です」というコンパイルエラーが発生します。Set wb = Workbooks.OpenText (Filename:=・・・・True)のように括弧でくくっても同様のエラーがでてしまいます。 Microsoft Office 14.0 Object Libratyの参照設定はチェックされています。 Workbooks.OpenText Filename:= _・・・=Trueの部分はマクロの記録の機能で生成したコードです。 このような場合、どのように記述すればよいのでしょうか。 よろしくお願いします。

  • Office2010のVBAファイル自動オープン

    VBAの自動オープンで対象ファイルの開き方によって VBAが正常に動かないので質問させt下さい。 ネットワーク上のサーバーである AD-1から開くのとネットワークドライブPから開くのとでは Excelの名前の管理機能が動作しません。 Private Sub Workbook_Open() Workbooks.Open Filename:= _ "\\ad1\共通\aaaa.xlsx" Worksheets("Sheet1").Activate と Private Sub Workbook_Open() Workbooks.Open Filename:= _ "P:\共通\aaaa.xlsx" Worksheets("Sheet1").Activate 両方とも稼働させる方法はあるのでしょうか? よろしくお願いします。 End Sub

  • Access VBAからExcelシートの削除

    お世話になります。 Access VBA から指定したExcelシートの削除を行うプログラムを下記の通りに記載しています。 Set oApp = CreateObject("Excel.Application") oApp.Workbooks.Open FileName:="エクセル.xls" oApp.DisplayAlerts = False oApp.Sheets("シート名1").Delete oApp.DisplayAlerts = True この場合において、"シート名1"が存在していれば問題なく処理されますが、 このシートが存在していなければエラーが起きます。 指定したExcelブックにこのシートが存在するかどうかのチェックを事前に行い、 存在する場合のみ削除処理を行うにはどうすればよいでしょうか? よろしくお願いします。 環境は、Access2007です。

専門家に質問してみよう