
ネットワーク上のエクセルとリンクしている時にデータ更新をvbaで、refresh Allで行う場合のエラー処理
Microsoft Excel2019を利用してます。
エクセルのwb1を個別のpcで利用して、社内ネットワーク上のwb2にリンクを張ってます。wb2は販売データが記録されていて、社内の色々な人が更新していきます。wb1はwb2の販売データを元に計算をすることを目的にしているので、wb2へのリンクを計算前に更新して使用しています。
更新は wb1上でrefresh All を利用しているのですが、エラー処理が出来ずに困っています。
wb2を誰かが開いている時に、wb1でrefresh Allをすると、wb2が読み取り専用で開いてしまいます。
onError処理で回避しようと思ったら、エラーと認識されないのか、wb2が読み取りで開いてしまいます。
wb2が誰かに使用されているときは、refresh Allをせずにエラーメッセージを出すようにするにはどうしたら良いでしょうか?
まずはwb2が利用されてるか調べるようなコードがあるのでしょうか?インターネットで調べてみても、ネットワーク上のwbに対して上手くいくコードが書けず、、困っています。どなたか教えてください。
No.2ベストアンサー
- 回答日時:
こんにちは
テストできる環境にないので、以下は正確な情報ではありませんけれど・・
>エラー処理が出来ずに困っています。
>エラーと認識されないのか、wb2が読み取りで開いてしまいます。
問題の状態の時に、エラーが発生せずに処理が止まってしまうという意味でしょうか?
それとも、対象ブックをreadOnlyで開いて、続行されるという意味でしょうか?
もしも後者なら、更新後に「対象ブックが開いていたなら閉じる」という処理を追加すれば済みそうな気もしますが・・
とは言え、誰かが更新途中のデータを(=整合性がとれていない可能性がある)そのまま利用するのは、気持ち悪いですね。
>まずはwb2が利用されてるか調べるようなコードがあるのでしょうか?
以下は少々変則的ですが、ブックをシークエンシャルファイルとして追加モードで開くという方法があるようです。
「追加モード」だと「書き込み可能」でなければならないので、エラーになるという仕組みです。
On Error Resume Next
Open "wb2.xlsx" For Append As #1
Close #1
If Err.Number > 0 Then m = "開いている" Else m = "開いていない"
On Error GoTo 0
MsgBox m
※ 存在しないファイル(パス)を指定すると、「書き込み」なので、そのファイル名で新しく作成されてしまいますのでご注意ください。
調べてはいませんけれど、他には、FileSystemObjectなどでファイルの状態を調べることができる方法があるかも知れません。
No.1
- 回答日時:
こんにちは
>wb2が利用されてるか調べるようなコードがあるのでしょうか?
Sub example()
Const nasBkPath As String = "\\・\・\wb2.xlsx"
Application.DisplayAlerts = False
Workbooks.Open Filename:=nasBkPath, Notify:=False
If ActiveWorkbook.ReadOnly Then
MsgBox "読み取り専用です"
ActiveWorkbook.Close
Else
'Refresh All ?
'Call main_procedure?
MsgBox "OKです"
End If
Application.DisplayAlerts = True
End Sub
nasBkPathはwb2のパスです
読み取り専用の場合、メッセージを出し閉じています
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで別BOOKに「名前の...
-
エクセルで極大値を拾うには
-
Excelで数行間隔で離れているデ...
-
Excel、sumifはありますが、min...
-
エクセルで各セルそれぞれ四捨...
-
EXCELで2つの数値のうち大きい...
-
PowerPointで表の1つの列だけ...
-
エクセルで二つの数字の小さい...
-
【画像あり】【関数】指定した...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで、2種類のデータを...
-
Excelで半角の文字を含むセルを...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
EXCELで 一桁の数値を二桁に
-
エクセルでオートフィルタのボ...
-
エクセル(勝手に太字になる)
-
エクセルで文字が混じった数字...
-
エクセルのオートフィルタで最...
-
SUMIFとCOUNTIFを合わせたよう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで極大値を拾うには
-
エクセルVBAで別BOOKに「名前の...
-
【Excel】4行ごとの和を集計し...
-
Excel、sumifはありますが、min...
-
Excelで数行間隔で離れているデ...
-
エクセルで各セルそれぞれ四捨...
-
エクセルのカウント関係の関数...
-
エクセル関数についての質問です
-
SUMIF関数の合計範囲を広くする...
-
1.5以上2.5未満の個数を求める...
-
ネットワーク上のエクセルとリ...
-
EXCEL: 数式を含んだΣは可能で...
-
EXCEL IF関数 AND、OR条件
-
因数分解が分かりません a2乗b2...
-
エクセルで、○がついた場合は10...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
エクセルでオートフィルタのボ...
おすすめ情報