
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
読み取り専用で開いているエクセルを編集モードに変更したい
Excel(エクセル)
-
読み取り専用ファイルを上書き保存するには?
Visual Basic(VBA)
-
自分のExcelを読み取り専用で開くVBAは?
Excel(エクセル)
-
-
4
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
5
Excel VBAで、複数のシートのセルの列幅を一度に変更する方法は??
Excel(エクセル)
-
6
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
7
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
8
Excelvbaの 編集のためロックされています について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じ型【ハイフンと数字】だけ...
-
プログラミングのペーパーテス...
-
appendChildがieだとできない??
-
pdfに丸秘などのスタンプを...
-
HTMLの毎月の更新を自動的に行...
-
カラー表記の足し算プログラム
-
VBAでIEのボタンを押してメッセ...
-
重い処理とはどのようなものが...
-
船のゲームを作っているのです...
-
GASでundefinedエラーが出ます
-
バナーのランダム表示(複数、...
-
getElementByIdを使用したグロ...
-
idを使わずにonclickで自身の要...
-
マウスストーカーやクリックで...
-
キーワードをクリックすると説...
-
html javascript リンク先アド...
-
ジェネレーターの作り方
-
onchangeイベントを使ってspan...
-
C#OpenCv V4にのエラーに関する...
-
JavaScriptによるundefined判定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
同じ型【ハイフンと数字】だけ...
-
ASP+アクセスでのSQLコメントに...
-
HTTPSのとき":"が"%3A"ではなく...
-
サブウインドウから親ウインド...
-
confirmの連続?
-
VC++のちらつき防止方法
-
Boolean型配列中のTrueの有無を...
-
Vb.netのグローバル変数の宣言...
-
コールバック関数(?)をループし...
-
javascriptで文字挿入でtoggle...
-
【Jquery】changeイベント毎にa...
-
ifreamをリロードしたい
-
Excel VBA の ChangeFileAccess
-
MFCのキャプション変更
-
Linux バイナリ実行できない "...
-
-(ハイフン)_(アンダーバー)の...
-
2次元のJSON形式の配列の展開
-
C# .NET DataGridView の行を追...
おすすめ情報