![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Excel(2000 SP-3) VBAの ChangeFileAccessがうまく行きません。
VBAからあるExcelファイルをWorkbooks.Open で開く処理の制御で悩んでいます。
2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが使用中です」的なメッセージが出ませんでした。
(エクスプローラからクリックしたりして、hoge.xlsを直接開くと、他のユーザが使用中かどうかがわかります)
それでは困るので、ChangeFileAccess のNotify:=true をセットしてみたら、2人目は他のユーザが使用中である旨のメッセージが出るようになりました。
しかし、ChangeFileAccess のNotifyはちゃんと設定されているようなのですが、
'ChangeFileAccess'メソッドは失敗しました:'_Workbook'オブジェクト
とエラーが出ています。
ChangeFileAccessはどう使うのが正しいのでしょうか?
ソースは
Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True
って感じなのですが。
Workbooks.Openはちゃんとできています。Workbooks.OpenがコケたらOn Error Goto で拾ってMsgBoxでメッセージを出す、という処理をしているのですが、Workbooks.OpenはOKなのにChangeFileAccessでコケて、On Error Goto に引っかかってしまっています。
No.1ベストアンサー
- 回答日時:
なかなか回答が付かないようなので。
。。ダメ元で以下のように一旦、xlReadOnlyにしたあと再度xlReadWriteに戻してみてください。
----------------------------------------------
Workbooks.Open Filename:=ThisWorkbook.Path & "\hoge.xls", updatelinks:=1, Notify:=True
●
If ActiveWorkbook.ReadOnly = False Then
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly, notify:=True
End If
●
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True
-------------------------------------------
ご回答ありがとうございました。
試してみたところ、xlReadOnlyをセットする時に「読み取り専用の切り替えを行う前に、編集内容を保存しますか?」とメッセージが出てしまいました。
でもWorkbooks.Openの直後なのでいいやー、とxlReadOnlyの直前に
ActiveWorkbook.Saved = True
をかましたら、黙ってうまく動いてくれました。(xlReadOnly をセットした後にはActiveWorkbook.Saved = False を入れてみました)
一度xlReadOnlyにしてみるという発想は全然なかったので、なんだか目からウロコな気分です。どうもありがとうございました。
No.2
- 回答日時:
> 2人で同時にマクロでhoge.xls をOpenすると、どちらも「他のユーザが
> 使用中です」的なメッセージが出ませんでした。
Workbooks.Open の前にこんな感じの関数でチェックしてもダメですか?
Function FileUsable(ByVal strFilename As String) As Long
'---------------------------------------------------------
' @Description: ファイルは使用可能かどうか調べる
' @Return : -1 ファイルは存在しない
' : 0 既に開かれている
' : 1 使用可能
'---------------------------------------------------------
Dim n As Integer
If Dir$(strFilename) <> vbNullString Then
n = FreeFile()
On Error Resume Next
Open strFilename For Binary Lock Read Write As #n
Close #n
If Err.Number = 0 Then FileUsable = 1
On Error GoTo 0
Else
FileUsable = -1
End If
End Function
この回答への補足
ご回答ありがとうございました。
ファイルがあるかどうか、開かれているかどうかは、こうやって調べればいいのですね...今までずっと「開いてみてコケたらファイルが存在しない」というチェック方法ばかりしていました。しかも、複数の人が同時に使うかどうかを意識したコーディングをしたこともありませんでした。
今回はNo.1 のtaocatさんの方法で行くことにしましたが、次からファイルチェックはKenKen_SPさんのこの関数の方法にしようと思います。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excelのマクロ ブック間である範囲をコピー Workbooks(“a.xlsx“).Sheets 3 2022/05/12 17:02
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
読み取り専用で開いているエクセルを編集モードに変更したい
Excel(エクセル)
-
読み取り専用ファイルを上書き保存するには?
Visual Basic(VBA)
-
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
6
Excelvbaの 編集のためロックされています について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Jquery】changeイベント毎にa...
-
Boolean型配列中のTrueの有無を...
-
ASP+アクセスでのSQLコメントに...
-
Imageコントロール vba
-
static constメンバ変数(配列)...
-
正規表現で半角数字1桁のみを全...
-
C# .NET DataGridView の行を追...
-
linuxで不一致検索
-
COOKIEの発行について
-
引数付きコンストラクタでコン...
-
static と externについて
-
ifreamをリロードしたい
-
サーバの、クライアント間でデ...
-
javascriptで文字挿入でtoggle...
-
return の中はローカルスコープ?
-
HTTPSのとき":"が"%3A"ではなく...
-
[javascript][DOM]getElementBy...
-
関数を呼び出すHTMLタグ<body o...
-
「オブジェクトが必要です。」...
-
google apps scriptの終了のさせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
【Jquery】changeイベント毎にa...
-
「オブジェクトが必要です。」...
-
Excel VBA の ChangeFileAccess
-
Vb.netのグローバル変数の宣言...
-
MFCのキャプション変更
-
onclick指定関数の引数へローカ...
-
同じ型【ハイフンと数字】だけ...
-
static constメンバ変数(配列)...
-
javascriptで文字挿入でtoggle...
-
サブウインドウから親ウインド...
-
URLの一部をコピーできるブック...
-
window.onloadでのfunction
-
Javascriptグローバル変数の値...
-
複数ファイルで使うグローバル...
-
全部のアクセスを指定したペー...
おすすめ情報