![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
VBSからのエクセル操作での初期ダイアログへの対応
VBSでのエクセルの初期ダイアログへの対応について教えてください。
ここでいう「初期ダイアログ」とは以下のことを指しています。
(A)読み取り推奨設定時にでるダイアログ
「…を変更し、保存する必要がなければ、読み取り専用で…」
(B)マクロを含むファイルを開くときに出るセキュリティ警告ダイアログ
「マクロにはウイルスが含まれている場合があります。…」
(C)読み取り・書き込みパスワード設定時のパスワード入力ダイアログ
ソースとしては、下記に示す簡易な内容です。
このとき、ファイルに何も属性がなければファイルを開いていることを
意識させずにエクセルの内容を取得することが出来ます。
しかし、読み取り推奨にされているときや、マクロが含まれるときには、
ダイアログが表示されてしまい、スマートに値を取得することが出来ません。
これを何か引数を与えるなどして、ダイアログを表示させないもしくは
一瞬ダイアログが表示されても、スクリプトに閉じさせるように
したいと思っています。
もし方法があるならそれを教えてください。
「方法がない」ということが分かっている場合は、
その旨を教えていただきたいです。
よろしくお願いします。
■α
Set excel = WScript.GetObject(filePath)
MsgBox excel.Sheets(sheetName).Cells(2, 2)
■β
Set excel = WScript.CreateObject("Excel.Application")
excel.Workbooks.Open filePath, , true
excel.Visible = false
Set sheet = excel.Sheets(sheetName)
MsgBox sheet.Cells(2, 2).value
excel.Workbooks.Close
excel.Quit
No.2ベストアンサー
- 回答日時:
VBSからのシートの特定のセルの値を取得するだけなら
With CreateObject("Excel.Application")
MsgBox .ExecuteExcel4Macro("'G:\[てすと.xls]Sheet1'!R2C2")
End With
セル参照はR1C1参照形式で指定する必要があります。
質問の仕方が悪かったかもしれません。
(A)(B)(C)すべて複合で同時に解決しなければならないわけではありません。
どれかひとつでもOKです。
直近で困っていたのは(A)なのですが、「(B)もよくあるよな…」と思い追加し、
「(C)の場合もクリアできたらいいな」と思い付け足しました。
で、ご提示していただいた方法で試してみました。
ぶっちゃけ昔はこの方法を採用していたのですが、
「ExecuteExcel4Macro」の部分などが古臭く感じて
今書いている方法α・βを書くようにしていました。
今の段階ではα・βでは(A)(B)のダイアログに対応できていません。
しかし!ご提示していただいた方法では、(A)(B)のダイアログが出ませんでした。
なぜかよく分かっていないのですが。びっくりしました。
(A)もしくは(B)が出てしまう場合には、こちらの方法を使えばいい、
ということを覚えておきます。
大変勉強になりました。ありがとうございました。
No.6
- 回答日時:
こんばんは。
>6時間たってもレスがないという状態を、
>レスをつける気がないと判断するのは性急過ぎると感じます。
#1と#5の発言者です。この種のVBSは自分の開発も、また回答の経験も数年あります。また、今回、一応、自分の発言に対しては、必ずしも同じ環境とは言えないものの、念のために試していますが、他の方たちの内容的に違います。レスポンスそのものがないと、残念ながら、ご理解されていないと解釈してしまいます。お礼と補足があるので、その両方とも何も付けなければ、どうお考えになっているか、こちらでは分かりません。
こちらは、VBカテゴリですので、初歩的な内容のコードを書く必要はないと思いました。
これが、テストサンプルです。
sheetName = "Sheet1"
psw ="00" 'パスワード
'-------------------------------------------
Set objXl= WScript.CreateObject("Excel.Application")
objXl.Visible = True
'-------------------------------------------
filePath =objXl.DefaultFilePath &"\" & "Test01.xls"
'-------------------------------------------
'objXl.DisplayAlerts = False
objXl.Workbooks.Open filePath,,True,, psw, psw,True
Set xlSheet = ObjXl.Sheets(sheetName)
MsgBox xlSheet.Cells(1, 1).Value
objXl.Workbooks.Close
'objXl.DisplayAlerts = True
objXl.Quit
Set objXl = Nothing
No.5
- 回答日時:
#1です。
レスを付けないというのは、理解しないか、無視しても良いと思う内容だということだと思います。こちらが、ご質問に対して、誤解しているとも限らないのですが。ちょっと補足して置きます。
まず、オートメーションでExcelを呼び出すなら、セキュリティのレジストリの変更は不要ですが……。他者のPCで動かすというなら、VBScript 自体を、一度、アンチウイルスの種類によっては、一度ソフトを通す必要はありますね。
私以外でも、同様のことを言っている人を見つけましたので紹介します。
ExcelVBAで作られたシートをセキュリティ警告無しで起動する方法
(h) ttp://ameblo.jp/b-snow/entry-10059772277.html
プライベートサイトだから、ハイパーリンクをさせないようにしてあります。こういう仕様というのは、常識ではないけれども、逆に、VBScript 自体の危険性は認識して置く必要はあると思います。
後は、初歩的な話で、Openメソッドの引数自体の問題だとは思いますが、ご本人が、パスワードをご存知でない場合は、仮に、Ver4 マクロ関数でも、ADOで構造を読み取っても、ダイアログがでない方法は、常識的な範囲では絶対に無理だと思います。たぶん、善意に受けとれば、ここに食い違いがあるのだろうと思いますが、パスワードを知らなければ、諦めたほうがよいですね。もし、不快な内容だと思うなら、どうぞ無視して構いません。
それと、Application.DisplayAlerts = False
は、関係ないような気がします。試してはいませんが。
この回答への補足
>レスを付けないというのは、理解しないか、
>無視しても良いと思う内容だということだと思います。
6時間たってもレスがないという状態を、
レスをつける気がないと判断するのは性急過ぎると感じます。
Excelのヘルプを調べろとの事だったので
調べてからあとで試そうと思い後回しにしただけです。
ご理解ください。
No.4
- 回答日時:
b.は、エクセルからの表示だと思います。
マクロのセキュリティレベルを下げないと止める事はできません。
外部から変更するなら、エクセルのレジストリ操作が必要になります。
必要なキーや値はネットを探せばすぐに見つかります。
この回答への補足
質問が分かりにくかったかもしれませんね。すみません。
(A)(B)(C)すべてエクセルが出すダイアログの話です。
(A)(B)については、No.2さんのご回答により、
スクリプトの内容だけで回避する方法が見つかりました。
No.1
- 回答日時:
こんにちは。
Open メソッドのオプションに、パスワードを入れればよいのではありませんか?
Excelのヘルプを調べてください。
ただ、スクリプトを開けて見られたくないなら、VBScript を暗号化する必要があります。(Win XP以下)あまり強い暗号化はできませんが。
>(B)マクロを含むファイルを開くときに出るセキュリティ警告ダイアログ
> 「マクロにはウイルスが含まれている場合があります。…」
VBScript で、こちらのメッセージはでないと思いますが……。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- その他(Microsoft Office) Office(Windows版,Word/Excel/PowerPoint等)にログインできません 4 2022/07/24 15:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel・Word リサーチ機能を無...
-
Excel マクロでShearePoint先の...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
Excel_マクロ_現在開いているシ...
-
Excel マクロ VBA プロシー...
-
エクセルに張り付けた写真のフ...
-
マクロ実行時、ユーザーフォー...
-
エクセルで縦に並んだデータを...
-
TERA TERMを隠す方法
-
ExcelのVBA。public変数の値が...
-
エクセルVBAでNAVITIMEを使って...
-
エクセルで別のセルにあるふり...
-
VBAにて別ワークブック上の実行...
-
エクセル VBA実行中のApplicati...
-
【Excel】複数のマクロをまとめ...
-
組んだマクロをメールで送る
-
ソース内の行末に\\
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
Excel マクロでShearePoint先の...
-
エクセルに張り付けた写真のフ...
-
Excel_マクロ_現在開いているシ...
-
ExcelのVBA。public変数の値が...
-
TERA TERMを隠す方法
-
マクロ実行時、ユーザーフォー...
-
ExcelVBAでPDFを閉じるソース
-
Excel VBAからAccessマクロを実...
-
特定文字のある行の前に空白行...
-
エクセルで別のセルにあるふり...
-
【EXCEL VBA】オートシェイプを...
-
エクセルで縦に並んだデータを...
-
マクロで空白セルを詰めて別シ...
-
wordを起動した際に特定のペー...
おすすめ情報