質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

2270閲覧

読み取り専用で開かれているブックをチェックしたい

aminothan

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/03/26 04:06

編集2020/03/26 05:47

前提・実現したいこと

読み取り専用のブックを開く前に、既に開かれているかチェックし、
開かれていた場合は保存せずに閉じることで下記エラーを防ぎたい。

発生している問題・エラーメッセージ

"通常のブック"が既に開いているかチェックする方法は理解しましたが、
"読み取り専用のブック"をチェックしたいため IsBookOpened = False
となってしまい、下記エラーとなります。

VBA

1実行時エラー '1004' 2同じ名前のファイルが既に開いています。

試したこと

既に開いているかチェックするには下記のコードを使いました。

VBA

1Sub FileCheck() 2 3 If (IsBookOpened(Path1) = True) Then 4 Workbooks(Book1).Close SaveChanges:=False 5 End If 6 7 Workbooks.Open Filename:=Path1, ReadOnly:=True 8 9End Sub 10 11Function IsBookOpened(a_Path1) As Boolean 12 13 On Error Resume Next 14 15 Open a_Path1 For Append As #1 16 Close #1 17 18 If Err.Number > 0 Then 19 IsBookOpened = True 20 Else 21 IsBookOpened = False 22 End If 23 24End Function

補足情報

OS:windows 10
ツール:Microsoft Excel 2010

何卒、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2020/03/26 04:29

タグでExcel , VBA ってのがわかるので タイトルに冗長な情報つけなくてもいいですよ :-)
aminothan

2020/03/26 05:03

ご指摘いただきありがとうございます。
guest

回答2

0

ベストアンサー

投稿2020/03/26 05:38

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aminothan

2020/03/26 07:06

そちらの記事を参考にしたところ、"IsBookOpen = True"となり思い通りの動作となりました。 ご回答いただきありがとうございました。
guest

0

なんかもう有無を言わさずCloseしちゃえばいいんじゃないかという気がする。

VBA

1 Path1 = "c:\temp\readonly.xlsx" 2 bookName = Dir(Path1) 3 4 On Error Resume Next 5 Workbooks(bookName).Close SaveChanges:=False 6 On Error GoTo 0 7 Workbooks.Open Filename:=Path1, ReadOnly:=True

ReadOnly プロパティで判断できますよ
(docs.microsoft.com)excel.workbook.readonly

投稿2020/03/26 04:30

編集2020/03/26 07:16
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aminothan

2020/03/26 05:41

ご回答いただきありがとうございます。 しかし、今回の例にReadOnlyプロパティを組み込む箇所が分かりません。 (A)Book1が開かれている⇒閉じる⇒開きなおす (B)Book1が閉じている⇒開く
Y.H.

2020/03/26 06:00 編集

>読み取り専用のブックを開く前に、既に開かれているかチェックし、 >開かれていた場合は保存せずに閉じることで下記エラーを防ぎたい。 これが何をやりたいのかよくわからないのですが・・・ 下記エラーを防ぐロジックじゃなくて、本当にやりたい事を質問に記載ください。 ・ファイルを開きたい。(同名のBookを開いている場合は閉じてから開く) ・でも読取専用のファイルの場合は開きたくない(保存せずに閉じたい) ということですか? それとも ・ファイルを読取専用で開きたい。(同名のBookを開いている場合は閉じてから開く)
aminothan

2020/03/26 06:48

・ファイルを読取専用で開きたい。(同名のBookを開いている場合は閉じてから開く) に該当します。
aminothan

2020/03/26 07:38

エラーを無視する手段を知らなかったため参考になりました。 ご回答いただきありがとうございました。
Y.H.

2020/03/26 07:43

>エラーを無視する手段を知らなかった え?IsBookOpened()の処理で同じ事してますよね。
aminothan

2020/03/26 08:01

参考にしたものをコピーしたままだったのですっかり忘れていました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問