
vbsでドラッグアンドドロップしたExcelファイルのブック共有解除
ActiveWorkbook.UnprotectSharing
ActiveWorkbook.ExclusiveAccess
を行いたいのですがうまくいきません
ご教示いただけますと幸いです。
▼ VBScriptを使ってExcelファイルを開き、共有を解除
' エラーハンドリングを有効にする
On Error Resume Next
' Excelアプリケーションオブジェクトを作成する
Set objExcel = CreateObject("Excel.Application")
' Excelアプリケーションの警告を表示しないように設定
objExcel.DisplayAlerts = False
' コマンドライン引数(ドラッグアンドドロップ)からファイルパスを取得
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
' Excelアプリケーションを終了し、オブジェクトを解放
objExcel.Quit
Set objExcel = Nothing
WScript.Quit
End If
filePath = objArgs(0)
' ファイルが存在するか確認
If CreateObject("Scripting.FileSystemObject").FileExists(filePath) Then
' Excelファイルを開く
' 共有を解除
Set objWorkbook = objExcel.Workbooks.Open(filePath)
ActiveWorkbook.UnprotectSharing
' ワークブックを閉じる
objWorkbook.Close False
End If
' Excelアプリケーションを完全に終了する
objExcel.Quit
Set objWorkbook = Nothing
Set objExcel = Nothing
' エラーハンドリングを解除
On Error GoTo 0
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
もう既に解決していらっしゃればご参考程度に。
On Error ステートメントは使い方がとても難しいです。
On Error Resume Next は発生したエラーを隠して気付かなくさせ、On Error GoTo 0 は終了コードを正常終了に変えてしまい Windows のイベントログにもエラー履歴が残らなくなります。このエラーを隠してしまう挙動によって、開発者はデバッグで混乱してしまうと思います。
Workbook.UnprotectSharing メソッド
Workbook.ExclusiveAccess メソッド
この Excel の2つのメソッドは、2つとも記述しないと実行されないことは知られている通りです。ただ、ご質問中のコードではエクセルのアプリケーションウィンドウが非表示の設定(明示的に記述しない場合はウィンドウ非表示になります)であるのに、Workbook オブジェクトの指定が ActiveWorkbook なのでエラーが発生します。ですが、On Error Resume Next があるため気付けていらっしゃらないかもしれません。
On Error Resume Next をエラーハンドリングの用途で書く場合は、少なくともエラーの内容を拾って表示させ、Windows がエラー履歴を残せる様に振る舞う必要があるのではないかと思います。場合によってはエラーによる後始末の内容までも記述しなければならないケースもあると思います。
[引用元]
On Error ステートメント | Microsoft Learn - 解説より
https://learn.microsoft.com/ja-jp/previous-versi …
ですが、実はエラー回避のために On Error Resume Next と記述する必要性はほぼ無く、エラーになる条件を調べておいてコードを工夫すればほとんどのケースでエラーを事前に回避させることが可能になっています。
例えば、Workbook.ExclusiveAccess メソッドは共有していないブックで実行するとエラーが発生しますが、事前に Workbook.MultiUserEditing プロパティで共有情報を調べておいて、条件分岐を組み合わせる事で共有しているブックに対象を絞って実行させるようにする事でエラーの事前回避ができます。
[引用元]
Workbook.ExclusiveAccess メソッド | Microsoft Learn - 注釈より
https://learn.microsoft.com/ja-jp/office/vba/api …
この実例は Excel VBA の構文ですが、 VBS でのエラー事前回避も同じことが言えます。VBS の場合も、WSH が持つ [~ オブジェクトの ~プロパティ]や、言語が持つ機能の [Is~] 関数などが活躍できると思います。
回答コードは文字数制限で全てを一度には掲載できないため Google ドキュメントにアップロードしました。On Error Resume Next の使用例の一例でも有りますが、同時に上記のエラー事前回避策も取り入れています。
また、私の記述スタイルは構造化プログラミングの考えを取り入れていますのでプロシージャの数が多くなっています。そして、コードの読み易さの向上が目的で行と行の間は空けている箇所が多く、コメントに関してはプロシージャ名や変数名で用途や内容を説明していますので多くは書き入れていません。Q & A サイトではあまり見掛けない Call ステートメントや Class 関連には何をする構文なのかをコメントしています。
回答コードのアップロード先 - Google ドキュメント
https://docs.google.com/document/d/1ubOAPdFNnOlX …
Google ドキュメントで表示されたコードを一番上から一番下まで選択してコピーし、メモ帳アプリなどに貼り付けてお試しください。なお、メモ帳アプリを使った場合は保存時の文字コードを UTF-8 から ANSI へ変更してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBS Bookを閉じるコード 1 2023/02/16 17:31
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) wordのマクロで思うように行きません(ファイル削除ができない) 3 2023/09/12 08:34
- Visual Basic(VBA) xmlドキュメントから別拡張子で保存したい 4 2023/09/12 11:08
- Visual Basic(VBA) VBA 1 2024/02/03 22:51
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2024/03/26 18:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイムスタンプの更新の方法2
-
動かなくなってしまった古いVBA...
-
サブフォルダ含むフォルダ内の...
-
フォルダ階層・ファイル名・ペ...
-
AccessからOLEオブジェクト型の...
-
c# で作成したアプリをある拡張...
-
ファイルを開く時間測定のスク...
-
ファイルを複数選択した時のフ...
-
エクセルのプロパティーでセキ...
-
PDFファイルについて
-
エクセルで複数のコメントのサ...
-
カンマ区切りのCSVファイルから...
-
ExcelブックをGoogleスプレッド...
-
C++でのフォルダ削除ができま...
-
同じファイル名 上書きしないフ...
-
エクセルvbaでdocuworksprinter...
-
【マクロ】フォルダにファイル...
-
実行ファイルのパスを取得したい
-
バッチファイルを作りたい。
-
【C#】パス名で無効な文字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動かなくなってしまった古いVBA...
-
「エクセルファイルが開いてい...
-
FileDialog オブジェクトでファ...
-
VBAでフォルダ内のhtmlファイル...
-
VB6でUTF-8ファイルの読取りを
-
vbaサブフォルダーをワイルドカ...
-
webブラウザからローカルファイ...
-
ffftpでファイル取得が0バイト...
-
サブフォルダ含むフォルダ内の...
-
ファイルを複数選択した時のフ...
-
VBAでCSVファイルを読み込もう...
-
複数のワークブックのVBAを変更...
-
excel マクロ PDF化の際のエラ...
-
Wordのプロパティ・総ページ数...
-
フォルダ階層・ファイル名・ペ...
-
フォルダ内のファイル存在監視...
-
AccessからOLEオブジェクト型の...
-
VB.net XMLの作成方法 Iniの代替
-
【ACCESS VBA】アクセスからデ...
-
vbs ブック共有を解除
おすすめ情報