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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
特定のPCだけ動作しないVBAマク...
-
Excel マクロ VBA プロシー...
-
【EXCEL VBA】オートシェイプを...
-
TERA TERMを隠す方法
-
ExcelのVBA。public変数の値が...
-
ExcelVBAでPDFを閉じるソース
-
Excel マクロでShearePoint先の...
-
Excel VBAからAccessマクロを実...
-
wordを起動した際に特定のペー...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBAを使ってタイトル行...
-
エクセルで別のセルにあるふり...
-
ExcelVBAの繰り返し処理でwebク...
-
Excel_マクロ_現在開いているシ...
-
エクセルマクロでワードの一ペ...
-
特定文字のある行の前に空白行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
Excel マクロでShearePoint先の...
-
ExcelVBAでPDFを閉じるソース
-
特定文字のある行の前に空白行...
-
マクロ実行時、ユーザーフォー...
-
wordを起動した際に特定のペー...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
-
マクロで空白セルを詰めて別シ...
-
【EXCEL VBA】オートシェイプを...
-
エクセルのマクロをセルの値に...
おすすめ情報