あなたの習慣について教えてください!!

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

A 回答 (6件)

VBSからのシートの特定のセルの値を取得するだけなら



With CreateObject("Excel.Application")
MsgBox .ExecuteExcel4Macro("'G:\[てすと.xls]Sheet1'!R2C2")
End With

セル参照はR1C1参照形式で指定する必要があります。
    • good
    • 0
この回答へのお礼

質問の仕方が悪かったかもしれません。
(A)(B)(C)すべて複合で同時に解決しなければならないわけではありません。

どれかひとつでもOKです。
直近で困っていたのは(A)なのですが、「(B)もよくあるよな…」と思い追加し、
「(C)の場合もクリアできたらいいな」と思い付け足しました。


で、ご提示していただいた方法で試してみました。
ぶっちゃけ昔はこの方法を採用していたのですが、
「ExecuteExcel4Macro」の部分などが古臭く感じて
今書いている方法α・βを書くようにしていました。

今の段階ではα・βでは(A)(B)のダイアログに対応できていません。
しかし!ご提示していただいた方法では、(A)(B)のダイアログが出ませんでした。

なぜかよく分かっていないのですが。びっくりしました。
(A)もしくは(B)が出てしまう場合には、こちらの方法を使えばいい、
ということを覚えておきます。

大変勉強になりました。ありがとうございました。

お礼日時:2010/02/08 19:23

こんばんは。



>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
    • good
    • 0
この回答へのお礼

困り度:「暇なときにでも」の質問を行い
ヘルプ見ろの回答をいただいたのに
6時間以内に補足もお礼をつけずすみませんでした。

お礼日時:2010/02/10 11:23

#1です。



レスを付けないというのは、理解しないか、無視しても良いと思う内容だということだと思います。こちらが、ご質問に対して、誤解しているとも限らないのですが。ちょっと補足して置きます。

まず、オートメーションでExcelを呼び出すなら、セキュリティのレジストリの変更は不要ですが……。他者のPCで動かすというなら、VBScript 自体を、一度、アンチウイルスの種類によっては、一度ソフトを通す必要はありますね。

私以外でも、同様のことを言っている人を見つけましたので紹介します。
ExcelVBAで作られたシートをセキュリティ警告無しで起動する方法
(h) ttp://ameblo.jp/b-snow/entry-10059772277.html
プライベートサイトだから、ハイパーリンクをさせないようにしてあります。こういう仕様というのは、常識ではないけれども、逆に、VBScript 自体の危険性は認識して置く必要はあると思います。

後は、初歩的な話で、Openメソッドの引数自体の問題だとは思いますが、ご本人が、パスワードをご存知でない場合は、仮に、Ver4 マクロ関数でも、ADOで構造を読み取っても、ダイアログがでない方法は、常識的な範囲では絶対に無理だと思います。たぶん、善意に受けとれば、ここに食い違いがあるのだろうと思いますが、パスワードを知らなければ、諦めたほうがよいですね。もし、不快な内容だと思うなら、どうぞ無視して構いません。

それと、Application.DisplayAlerts = False
は、関係ないような気がします。試してはいませんが。

この回答への補足

>レスを付けないというのは、理解しないか、
>無視しても良いと思う内容だということだと思います。

6時間たってもレスがないという状態を、
レスをつける気がないと判断するのは性急過ぎると感じます。

Excelのヘルプを調べろとの事だったので
調べてからあとで試そうと思い後回しにしただけです。

ご理解ください。

補足日時:2010/02/09 13:42
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 10:29

b.は、エクセルからの表示だと思います。


マクロのセキュリティレベルを下げないと止める事はできません。

外部から変更するなら、エクセルのレジストリ操作が必要になります。
必要なキーや値はネットを探せばすぐに見つかります。

この回答への補足

質問が分かりにくかったかもしれませんね。すみません。
(A)(B)(C)すべてエクセルが出すダイアログの話です。

(A)(B)については、No.2さんのご回答により、
スクリプトの内容だけで回避する方法が見つかりました。

補足日時:2010/02/08 19:25
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 10:29

#2です


パスワードまで考えていませんでした。読み飛ばしてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 10:29

こんにちは。



Open メソッドのオプションに、パスワードを入れればよいのではありませんか?
Excelのヘルプを調べてください。

ただ、スクリプトを開けて見られたくないなら、VBScript を暗号化する必要があります。(Win XP以下)あまり強い暗号化はできませんが。

>(B)マクロを含むファイルを開くときに出るセキュリティ警告ダイアログ
> 「マクロにはウイルスが含まれている場合があります。…」

VBScript で、こちらのメッセージはでないと思いますが……。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/11/06 10:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報