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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
エクセルに張り付けた写真のフ...
-
Excel マクロ VBA プロシー...
-
一つのTeratermのマクロで複数...
-
特定文字のある行の前に空白行...
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
マクロの連続印刷が突然不可能...
-
マクロで空白セルを詰めて別シ...
-
ExcelVBAでPDFを閉じるソース
-
組んだマクロをメールで送る
-
Excel_マクロ_現在開いているシ...
-
wordを起動した際に特定のペー...
-
ソース内の行末に\\
-
マクロ実行時、ユーザーフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
Excel VBAからAccessマクロを実...
-
wordを起動した際に特定のペー...
-
マクロ実行時、ユーザーフォー...
-
エクセルで別のセルにあるふり...
-
マクロで空白セルを詰めて別シ...
-
ソース内の行末に\\
-
Excel_マクロ_現在開いているシ...
-
ダブルクリックで貼り付けた画...
おすすめ情報