ネットワーク上のエクセルとリンクしている時にデータ更新を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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- 格安スマホ・SIMフリースマホ SIMフリースマホ(Android限定)米国で通話ができる実売3万円台の電池が持つ端末はないですか? 6 2022/11/12 11:42
- Excel(エクセル) エクセルで、2つのセルに検索値を入れて結果を一覧表示させる 1 2023/07/10 10:26
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Excel(エクセル) Google Spreadsheetのカスタム表示形式について 2 2023/05/20 09:10
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで極大値を拾うには
-
SUMIF関数の合計範囲を広くする...
-
エクセルVBAで別BOOKに「名前の...
-
【Excel】4行ごとの和を集計し...
-
EXCEL: 数式を含んだΣは可能で...
-
EXCELで2つの数値のうち大きい...
-
Excel元に戻す方法を教えてくだ...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
「B列が日曜の場合」C列に/...
-
エクセルで最初のスペースまで...
-
エクセルのオートフィルタで最...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでオートフィルタのボ...
-
エクセルで、2種類のデータを...
-
エクセルで時刻(8:00~20:00)...
-
VBAで文字列を数値に変換したい
-
A列がない・・・A列が非表示に...
-
2つのエクセルのデータを同じよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで極大値を拾うには
-
エクセルVBAで別BOOKに「名前の...
-
【Excel】4行ごとの和を集計し...
-
EXCEL: 数式を含んだΣは可能で...
-
ネットワーク上のエクセルとリ...
-
(EXCEL関数)特定範囲内の最大値
-
Excelで数行間隔で離れているデ...
-
エクセルで各セルそれぞれ四捨...
-
Excel、sumifはありますが、min...
-
1.5以上2.5未満の個数を求める...
-
SUMIF関数の合計範囲を広くする...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセルで、2種類のデータを...
-
エクセルで時刻(8:00~20:00)...
-
エクセルのオートフィルタで最...
おすすめ情報