Excel2003起動プログラム(VBS)

このQ&Aのポイント
  • Excelを自動で起動させるプログラムを組みたいです。
  • VBSを使ってダブルクリックするとExcelが起動されるプログラムを作成したいです。
  • 同じフォルダにある一番新しいファイルが更新されていたらExcelを起動し、更新されていなかったら何もしないプログラムをVBSで組みたいです。
回答を見る
  • ベストアンサー

Excel2003起動プログラム(VBS)

Excelを自動で起動させるプログラムを組みたいと思っています。 VBSをダブルクリックしたらExcelが起動されるものです。 起動するのにも、条件があります。 同じフォルダにある一番新しいファイルが 更新されたかどうかを判断します。 更新されていたら、何もせず、 更新されていなかったらExcelを起動させたいです。 このようなプログラムをVBSで組めるのでしょうか? VBAについては多少理解し始めたのですが、 VBSになるとエラーが目で見て分かることが少ないため、 何が原因か判別するのが難しいです。 ブックがある位置は、 BookPath = ThisWorkbook.Path で合っているのかと思います。 例えば、C:上にTOPというフォルダがあるとします。 そして、その中にExcelファイル A.xls 更新日時 2013/10/11 B.xls 更新日時 2013/11/05 C.xls 更新日時 2013/11/10 があります。 この場合、一番新しいエクセルデータ 「C.xls」が今日(11/11)更新されていないので、 VBSを叩いたら表示されるようにしたいのです。 C:直下にあるTOPフォルダにはどんどんEXCELファイルが 増えていくようになっています。 説明不足な点もあるかもしれませんが、 回答よろしくお願いいたします。

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

  • ベストアンサー
  • itu1989
  • ベストアンサー率44% (37/83)
回答No.3

#2 補足回答 こちらでは起こっていない現象なのでわかりません。 VBA同様VBSも MsgBox(変数) でダイアログを表示できるので変数の状態等確認して見て下さい

satoron666
質問者

お礼

回答ありがとうございます。 MsgBoxを使っても特に問題は無かったのですが、 Excelファイルを開く部分に問題があると考えたため、 他の方法を使用したところ、普通に開くことができました。 Dim objExcel 'エクセルオブジェクトを作成します Set objExcel = CreateObject("Excel.Application") 'エクセル画面を表示します objExcel.Visible = True '(1)ワークブックを開きます objExcel.Workbooks.Open objFolder + "\" + saisin_file 'エクセルオブジェクトの破棄 Set objExcel = Nothing 言い忘れておりましたが、 Excelが2003なのが原因でしょうか? 何度も丁寧な返答して下さり ありがとうございました! itu1989様のおかげで やりたいことが実現しました。ありがとうございました!

その他の回答 (2)

  • itu1989
  • ベストアンサー率44% (37/83)
回答No.2

#1です。 OKWave上で投稿した半角スペースは無視されます。 なので、ソースを見やすくする為に投稿したソースのインデントは全角スペースになっているのでコンパイルエラーが出ます。 全角スペースを消す or 半角スペースへ置換して再度実行して下さい。

satoron666
質問者

補足

早いお返事、ありがとうございます。助かります。 全角スペースを置換し、 再度実行してみました。 実行している気がするものの(実行している輪が出る) Excelファイルが開きません。 (更新日時は11/05のものです) 回答よろしくお願い致します。

  • itu1989
  • ベストアンサー率44% (37/83)
回答No.1

(1)対象フォルダを取得する (2)フォルダ内のファイル数分ループ処理を行い、日付を比較して日付の新しいファイルの情報を保持する (3)ループ後現在日付のYYYYMMDDとファイルの日付のYYYYMMDDを比較し1以上の値の場合過去日と判断しファイル指定でEXCEL.EXEを起動する    【例】ファイル:2013/11/9 現在:2013/11/11 ⇒ 20131111 - 20131109 = 2    ※日付を比較するためにMMDDは必ず0埋めする事! ↓↓↓↓以下ソース↓↓↓↓↓ Dim saisin_date Dim saisin_file ' フォルダをオブジェクト取得 Set objFso = CreateObject("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder("C:\Top\") ' ファイル数ループ for each file in objFolder.Files   ' 初回   if saisin_date = "" then     saisin_date = file.DateLastModified     saisin_file = file.Name   ' 比較(2回目以降)   elseif file.DateLastModified > saisin_date then     ' 日付が新しい方へ情報を更新     saisin_date = file.DateLastModified     saisin_file = file.Name   end if next ' ループ終了で対象フォルダ内の最新ファイルが取得できている ' 現在日付と比較し、過去日ならファイルを指定してEXCEL.EXEを実行する Dim dayTarget:dayTarget = Right("0" & Year(saisin_date) , 4) & Right("0" & Month(saisin_date) , 2) & Right("0" & Day(saisin_date) , 2) Dim dayNow:dayNow = Right("0" & Year(Now()) , 4) & Right("0" & Month(Now()) , 2) & Right("0" & Day(Now()) , 2) '日付の差をチェック if (dayNow - dayTarget) >= 1 then   Set shell = WScript.CreateObject("WScript.Shell")   shell.Run """C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"" " + saisin_file + "" end if

satoron666
質問者

補足

回答ありがとうございます。 10行目1 コンパイルエラー 文字が正しくありません と表示されます。 Terapadに貼り付け、 VBSとして保存し、 C:¥直下のフォルダの中に入れて実行してみましたが 上記のエラーが出ます。 10行目は  ' 初回 の部分ですが、どこもおかしいように思えません。 なぜでしょうか?

関連するQ&A

  • VBSでExcelシートのコピー

    VBSである決まったExcelシートを別なExcelファイルにシートコピーできる方法はないですか? やりたいことは、Excelファイル「A.xls」内の「Sheet1」というシートをExcelファイル「B.xls」の一番末尾に「Sheet1」をコピーする、です。 (Excelのシート名上で右クリック→「移動またはコピー」→移動先ブック名を選択→「末尾へ移動」、「コピーを作成」にチェック、と同じことをVBS上で行いたいのですが。)

  • VBS★Excel★スクリプト★引数の取得

    VBSは初心者というか、やったことがありません。ど素人になります。 説明がとてもぎこちないのもその辺からだと思いますが、宜しくお願いします。 VBのシステムからVBSファイル <内容> Dim wbname Dim mypara Dim file_path Dim oApp file_path = "C:\share\Excel\1234.xls" Set oApp = CreateObject("Excel.Application") oApp.Visible = True On Error Resume Next oApp.UserControl = True oApp.Workbooks.Open "C:\share\Excel\1234.xls" Set oApp = Nothing WScript.Quit を指定して起動すると(1)Excelで作成したシステムが稼動するように作りたいのですが、(1)を起動する環境設定があり、C:\Documents and Settings\MBS\デスクトップ\1111.vbs #CODE #CODEが引数になります。 その#CODEをVBSで取得したいのですが、単体で1111.vbsを動かすとExcelファイルは動きます。 元のシステムではexeファイルしかみないようなのですが、例えば電卓とかメモ帳とかは動きます。vbsファイルだけは動きません。どのようにすれば動くかアドバイスをお願いします。 宜しくお願いします。

  • パスワード保護されたxlsxをコマンドラインから開

    http://okwave.jp/qa/q2991655.html 上記のリンクに従い、 auto_input_pw.vbsを c:\に置きます。 その上で、 \\sereve\folder 1\excel.xls サーバ上のxlsファイルを開くバッチを作りました。 -- cd c:\ cscript c:\auto_input_pw.vbs "\\sereve\folder 1\excel.xls" pass -- というものですが、 これを cscript c:\aa\auto_input_pw.vbs "\\sereve\folder 1\excel.xlsx" pass と単純に書き換えたのですが、うまくいきません。 プロパティでみてもexceと関係付けられているのですが・・・ あと、このバッチを応用して任意のファイルを開けないでしょうか auto_input_pw.vbsがルート直下に沖、 という状態で環境変数を使い、すべてサーバーも端末含めたドライブで同じパスワードをはずせるようにするには環境変数を使えばよいはずなので。 cscript c:\auto_input_pw.vbs "%dp1\*.xls" pass としましたがうまく起動しません。環境変数がまちがっているのでしょうか。

  • 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→エクセル マクロを有効にして起動

    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")によって マクロが無効になってしまっているのはないか? と思っています。 恐れ入りますが、 よろしくアドバイスの程お願いします。

  • Excelを別々に起動する方法を教えてください。

    C:\の中にa.xls, b.xls, c.xlsという3つのExcelファイルがあったとします。 a.xlsを起動した後に、b.xls, c.xlsを起動すると、a.xlsと同じブックの中にチャイルドウィンドウとして、b.xls, c.xlsが開かれてしまいます。 別のブックとして起動したいので、毎回まずExcelを起動しデフォルトで作成されているBook1.xlsというチャイルドウィンドウを閉じ、その中にa.xlsをドラッグアンドドロップ Excelを起動しデフォルトで作成されているBook1.xlsというチャイルドウィンドウを閉じ、その中にb.xlsをドラッグアンドドロップ Excelを起動しデフォルトで作成されているBook1.xlsというチャイルドウィンドウを閉じ、その中にc.xlsをドラッグアンドドロップ という感じで別のブックとしてファイルを開いているのですが、ファイルそのものをダブルクリックするだけで別のブックとしてExcelを立ち上げる方法はありますか? ツール⇒オプションをざっと眺めてみたのですが、それを設定できそうな項目がなかったので、どなたか方法ご存知の方がいましたら教えてください。 使用しているOSはXPでExcel2003です

  • 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で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が指定されているものとします。

  • 【VBS】 フォルダ直下のファイル名を配列に取り込む方法

    いつもお世話になっております。 WindowsXP環境のある【D:\test】フォルダにいくつかのテキストファイルやエクセルファイル等があります。 これらのファイル名及び更新日時をVBSの配列( File()とTime()の2つの配列 )に取り込む事は可能でしょうか? 1つの配列にファイル名及び更新日時の情報を配列に入れるのは難しそうなので2つ分けて取りこみたいのです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。

  • Excel2003(Winxp-SP3です)のスイッチ/eは、

    Excel2003(Winxp-SP3です)のスイッチ/eは、 立ち上げたとき新規のブック(Book1.xlsなどといった白紙のブック)を作らない設定ですね。 スタートメニューからファイル名を指定して実行で、 (1)"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" (2)"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /e を実行してみると、(1)(2)の違いがよくわかります。 ところで、フォルダオプションのファイルの種類で「XLS」を覗いてみると、 太字表示の「開く(O)」について、「アクションを実行するアプリケーション」の欄が上記(2)のようになっています。 ちなみにDDEメッセージ欄は[open("%1")]となっています。 で、質問ですが、上記「アクションを実行するアプリケーション」欄は、(1)でよい、つまり、「/e」は不要なのではないでしょうか。 ○○.xlsというファイルをダブルクリックしたとき、上記「/e」があってもなくても○○.xlsが開くだけで、白紙のブック(Book1.xlsなぞ)は生成されません。 フォルダオプションの上記箇所に「/e」の記述が必要なのは、どんなケース(どんな人)でしょうか。

専門家に質問してみよう