VBSからのエクセル操作での初期ダイアログへの対応

このQ&Aのポイント
  • VBSでエクセルの初期ダイアログへの対応方法を教えてください。
  • VBSからエクセルを操作する際に、初期ダイアログが表示されてしまう問題に対応したいです。
  • エクセル操作中に表示される初期ダイアログを回避する方法を教えてください。
回答を見る
  • ベストアンサー

VBSからのエクセル操作での初期ダイアログへの対応

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

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

VBSからのシートの特定のセルの値を取得するだけなら With CreateObject("Excel.Application") MsgBox .ExecuteExcel4Macro("'G:\[てすと.xls]Sheet1'!R2C2") End With セル参照はR1C1参照形式で指定する必要があります。

mibusys
質問者

お礼

質問の仕方が悪かったかもしれません。 (A)(B)(C)すべて複合で同時に解決しなければならないわけではありません。 どれかひとつでもOKです。 直近で困っていたのは(A)なのですが、「(B)もよくあるよな…」と思い追加し、 「(C)の場合もクリアできたらいいな」と思い付け足しました。 で、ご提示していただいた方法で試してみました。 ぶっちゃけ昔はこの方法を採用していたのですが、 「ExecuteExcel4Macro」の部分などが古臭く感じて 今書いている方法α・βを書くようにしていました。 今の段階ではα・βでは(A)(B)のダイアログに対応できていません。 しかし!ご提示していただいた方法では、(A)(B)のダイアログが出ませんでした。 なぜかよく分かっていないのですが。びっくりしました。 (A)もしくは(B)が出てしまう場合には、こちらの方法を使えばいい、 ということを覚えておきます。 大変勉強になりました。ありがとうございました。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答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

mibusys
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#1です。 レスを付けないというのは、理解しないか、無視しても良いと思う内容だということだと思います。こちらが、ご質問に対して、誤解しているとも限らないのですが。ちょっと補足して置きます。 まず、オートメーションでExcelを呼び出すなら、セキュリティのレジストリの変更は不要ですが……。他者のPCで動かすというなら、VBScript 自体を、一度、アンチウイルスの種類によっては、一度ソフトを通す必要はありますね。 私以外でも、同様のことを言っている人を見つけましたので紹介します。 ExcelVBAで作られたシートをセキュリティ警告無しで起動する方法 (h) ttp://ameblo.jp/b-snow/entry-10059772277.html プライベートサイトだから、ハイパーリンクをさせないようにしてあります。こういう仕様というのは、常識ではないけれども、逆に、VBScript 自体の危険性は認識して置く必要はあると思います。 後は、初歩的な話で、Openメソッドの引数自体の問題だとは思いますが、ご本人が、パスワードをご存知でない場合は、仮に、Ver4 マクロ関数でも、ADOで構造を読み取っても、ダイアログがでない方法は、常識的な範囲では絶対に無理だと思います。たぶん、善意に受けとれば、ここに食い違いがあるのだろうと思いますが、パスワードを知らなければ、諦めたほうがよいですね。もし、不快な内容だと思うなら、どうぞ無視して構いません。 それと、Application.DisplayAlerts = False は、関係ないような気がします。試してはいませんが。

mibusys
質問者

お礼

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

mibusys
質問者

補足

>レスを付けないというのは、理解しないか、 >無視しても良いと思う内容だということだと思います。 6時間たってもレスがないという状態を、 レスをつける気がないと判断するのは性急過ぎると感じます。 Excelのヘルプを調べろとの事だったので 調べてからあとで試そうと思い後回しにしただけです。 ご理解ください。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.4

b.は、エクセルからの表示だと思います。 マクロのセキュリティレベルを下げないと止める事はできません。 外部から変更するなら、エクセルのレジストリ操作が必要になります。 必要なキーや値はネットを探せばすぐに見つかります。

mibusys
質問者

お礼

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

mibusys
質問者

補足

質問が分かりにくかったかもしれませんね。すみません。 (A)(B)(C)すべてエクセルが出すダイアログの話です。 (A)(B)については、No.2さんのご回答により、 スクリプトの内容だけで回避する方法が見つかりました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

#2です パスワードまで考えていませんでした。読み飛ばしてください。

mibusys
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 Open メソッドのオプションに、パスワードを入れればよいのではありませんか? Excelのヘルプを調べてください。 ただ、スクリプトを開けて見られたくないなら、VBScript を暗号化する必要があります。(Win XP以下)あまり強い暗号化はできませんが。 >(B)マクロを含むファイルを開くときに出るセキュリティ警告ダイアログ > 「マクロにはウイルスが含まれている場合があります。…」 VBScript で、こちらのメッセージはでないと思いますが……。

mibusys
質問者

お礼

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

関連するQ&A

  • VBSからのエクセル操作

    エクセルでテキストファイルを開く作業をVBSで自動化したいのですが、下のスクリプトが上手く動作しません。どうすれば上手いこと動くように出来るでしょう? OpenTextのVBS上での使用法がポイントだと思うんですが。 Dim objXL Set objXL = WScript.CreateObject("Excel.Application") objXL.Workbooks.OpenText "hoge.txt", ,1, xlDelimited, xlDoubleQuote, False, False, False, False, False, True, ":", Array(1, 1) objXL.Visible = True

  • エクセルブックの複製(.vbs)

    「原紙」という名前のエクセルブックがあり、新しいお客様が増えたらそのブックを複製し、更にその時にダイアログを出してお客様の名前を入力し、それをファイル名にしたいです。 下記の.vbsファイルに元ファイルをドラッグすると連番を付けて複数作る、という目的でのコマンドを見つけました(これも凄いですが)。 もし改良出来る方がいたら教えてください。 ・コピー数の指定は必要ありません(毎回1ファイルのみ複製)。 ・ドラッグすると、ダイアログが出てきて入力したものがファイル名になる。 よろしくお願い致します。 If WScript.Arguments.Count = 0 Then WScript.Quit Dim fso Set fso = CreateObject( "Scripting.FileSystemObject" ) '--- コピー元ファイルの確認 filePath = WScript.Arguments.Item(0) If fso.FileExists( filePath ) = False Then WScript.Echo filePath & "がありません" WScript.Quit End If '--- コピー数の指定 Num = InputBox( filePath & vbNewLine & "をいくつコピーしますか") If IsNumeric( Num ) = False Then WScript.Echo "数値を入力してください。" WScript.Quit End If If Num > 999 Or Num < 1 Then WScript.Echo "数値は1~999で指定してください。" WScript.Quit End If Extention = "." & fso.GetExtensionName( filePath ) '--- ファイルチェック For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) If fso.FileExists( newFilePath ) = True Then WScript.Echo "作成予定のファイル【" & newFilePath & "】が既に存在します。" WScript.Quit End If Next '--- ファイルコピー For i=1 To Num newFilePath = Replace( filePath, Extention, "_" & Right( "000" & i, 3) & Extention ) fso.CopyFile filePath, newFilePath Next

  • バッチファイルファイル→VBS→エクセル マクロを有効にして起動

    Win/XP エクセル2002使用です。 VBSからエクセルのマクロを有効にして立ち上げたいのですが、 上手くいきません。 バッチファイル側  cd /D c:\  C:\***.vbs  exit /B VBS側 'エクセル起動  Set WshShell = CreateObject("WScript.Shell")  WshShell.CurrentDirectory = "C:\***"  WshShell.Run "C:\***\***.xls",3  WScript.Sleep(5000)  WshShell.SendKeys("E") '←マクロを有効にする  WScript.Sleep(5000)  WshShell.SendKeys("U") '←データソースへのリンクを更新 エクセル側(マクロ)  Sub Auto_open()   Application.OnTime TimeValue("13:00:00"), "Action"  End Sub  Sub Action()    ・・・(省略)・・・  End Sub ----------------------------- また、エクセルマクロは、VBSではなく手動で立ち上げますと、 問題なく時間になった時(13時)に作動します。 VBSのRunメソッドが、 エクセルマクロの Application.OnTime を待たずに走ってしまうことで、 エクセルマクロが無効になってしまっているのではないか? もしくは、データ更新のための sendkey("U")によって マクロが無効になってしまっているのはないか? と思っています。 恐れ入りますが、 よろしくアドバイスの程お願いします。

  • vbsでexcelのクリアとフォームの表示をしたい

    お世話になっております。 vbsの以下の記述でexcelを開いています。 開くところまでは行くのですが、その後のsheet1のデータのクリアとUserForm1の表示がどうしてもできません。 申し訳ありませんが、どなたかおわかりの方、教えていただけないでしょうか。 宜しくお願いいたします。 Dim oApp Dim objWshShell Dim scriptPath 'Excelオブジェト作成 Set oApp = CreateObject("Excel.Application") 'WScript.Shellオブジェクト作成 Set objWshShell = CreateObject("WScript.Shell") oApp.Visible = True '不可視にする oApp.UserControl = True 'Excelファイルを開く scriptPath = WScript.ScriptFullName scriptPath = left(scriptPath,len(scriptPath)-len(WScript.ScriptName)) oApp.Workbooks.Open scriptPath & "共同資料.xlsm"

  • vbsでexcelファイルを印刷したいのですが、印刷部数の設定がどうし

    vbsでexcelファイルを印刷したいのですが、印刷部数の設定がどうしてもわかりません。 他で見つけたスクリプトですが…。 Set obj = CreateObject("Excel.Application") Set WSHShell = CreateObject("Wscript.Shell") Set objWkBk = obj.Workbooks.Open("D:\TEST.xlsx") obj.ActiveWindow.SelectedSheets.PrintOut() obj.quit() Set obj = Nothing ご教授お願いいたします。

  • VBSからのエクセル起動について

    マクロを含んだBook(自作したもの)の起動時、起動直後の「セキュリティの警告画面」を、マクロセキュリティ中の状態で、表示させないで起動するためにVBSからの起動起動を考えています。いくつかウィンドウを開いた状態で、下記のコードにてBookを開くと、最前面に表示表示してくれません。対処方を教えてください。 Option Explicit Dim objExcelApp, strPath Const BookName = "Book1.xls" Set objExcelApp = CreateObject("Excel.Application") With WScript strPath = Replace(.ScriptFullName, .ScriptName, "") End With objExcelApp.Workbooks.Open strPath & BookName, False, False Set objExcelApp = Nothing *VBSはまだ勉強不足で、なんとなくこのコードの意味も解る程度です。VBAに関しては、一通り基本的なことはできます。よければ、このコードの詳しい意味も教えてください。また、他の対処法があれば教えてください。よろしくお願いします。

  • vbsで、フォルダ内にあるcsvファイル全てを開き、マクロを起動させた

    vbsで、フォルダ内にあるcsvファイル全てを開き、マクロを起動させたい。 こんにちは。 お世話になっております。 さて、最初はバッチでどうにかならないかと思っていましたが、下記vbsソースを見つけ、 早速チャレンジしたのですが、ファイルが開くところまではうまく行きますが、「マクロ Macro1がありません」というメッセージが出てしまい、マクロが実行されません。 手動でマクロを実行しようとするときに出てくるマクロ一覧には、PERSONAL.XLS:Macro1と、表示されております。 マクロの保存先をまちがえているのでしょうか? また、あるフォルダのcsvファイル全てに対して1つのvbsキックで処理が行なわれるようにするには、どの様にすればいいでしょうか? よろしくお願いします。 ----------------------------------------------------------------------- Dim obj Set obj = WScript.CreateObject("Excel.Application") obj.Visible = True obj.Workbooks.Open "C:\Documents and Settings\Administrator\My Documents\001.xls" obj.Application.Run "Macro1"

  •  VBSの作り方がわかりません

    下記のようなVBSを使いたいのですが   テキストでなくエクセルをアクティブにしたいのですがうまくいきません   どのように直せばよいのかお教えください。  お願いいたします。 Dim excel With CreateObject("Wscript.Shell") .Run "D:\DATA\T.txt" End With On Error Resume Next Set excel = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set excel = CreateObject("Excel.Application") End If excel.Visible = True excel.Workbooks.Open "D:\DATA\Sin1.xls"

  • エクセルが非表示で開く

    vbsでエクセルを開こうと思いネットをググって下記のような命令文を拾ってきて使っています。 >>Set oEXCEL = WScript.CreateObject("Excel.Application") >>oEXCEL.Workbooks.Open(SelfPath & "..\..\Trend_Book.xls") >>oEXCEL.Sheets(1).Select ところがこの方法では何らかの条件(不明なのですが)によって非表示の状態で開いているようなのです。 毎回確実に表示させて開く方法をご存知の方、いらしたら是非お教えください。 よろしくお願いします。 ※OSはXP、エクセルは2000です。

  • VBSでEXCELのXLSTARTにあるマクロを実行するには

    VBSを実行したときに既にEXCELを開いている場合にはFor Each wb In Workbooksを使ってXLSTARTフォルダにあるファイルのVBAマクロを実行できます。しかし、EXCELを開いていない場合にはCreateObject("Excel.Application")でEXCELを開いてもXLSTARTフォルダにあるファイルそのものが見つかりません。VBSを使わず、プログラムファイルからEXCELを開く場合にはXLSTARTフォルダにあるファイルも問題もなく開きます。どうすればEXCELを開いていない場合でもVBSでEXCELのXLSTARTにあるマクロを実行できるでしょうか? 因みにXLSTARTのフォルダパスは不特定多数の環境(OSはWindows95-XP、EXCELは97-2007の組合せ)で特定されていないものとします。さらにツール、オプションの全般タブの「起動時に全てのファイルを開くフォルダ」にはXLSTARTが指定されているものとします。

専門家に質問してみよう