• ベストアンサー

vbスクリプトからexcelのVBAを起動したい。

vbスクリプトからexcelのVBAを起動したいので、初心者ながら下記のようにコーディングしましたが、excelのVBA;main()が実行できません。  <excelのVBA;main()は単独では正常に起動します。> vbスクリプトからexcelのVBAの起動の方法を教えて下さい。 そのスクリプトをタスク(元旦)に起動したいです。 <vbスクリプト コーディング> dim exlApp On Error Resume Next set exlApp = createobject("Excel.Application") exlApp.visible = true exlApp.Workbooks.Open "C:\年賀状.xls" exlApp.run "Main" If Err Then WScript.Quit End IF If Not(exlApp Is Nothing) Then exlApp.Quit set exlApp = nothing End If

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

冒頭の『On Error Resume Next』をコメントアウトして どこでどのようなエラーが出ているのか確認しましょう On Errorなどのトラップはデバッグが仕上がってから有効にするか ある命令だけスキップしたい場所へOn ErrorResume Next と On Error Goto 0 をセットで使ってデバッグしましょう または On Error Goto ラベル として エラートラップルーチンを仕込んでおいて Err.Numberなどで スキップしてもいいエラーなのかを適切に判断し スキップする場合は Resume Next でとっらぷされた次の命令に返します 予定外のエラーなら MsgBoxやWScript.Echoなどでエラー表示をさせましょう

UKUJIMA
質問者

お礼

デバッグする。 基本ですね。 ありがとうございました。 『On Error Resume Next』をコメントアウトしてみると、 "年賀状.xlsがありません。"と出ました。"年賀状.xls"が何か不正な文字だったのか?一度、名称を換えもう一度"年賀状.xls"に書き直すと 出来ました。

その他の回答 (3)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

どれでも関係ないと思います。 以下のように変更してみてください。 例えば、EXCEL の起動するブック名「年賀状.xls」、実行するモジュール名「Sub Main()」 の場合、 dim exlApp dim exlBook set exlApp = WScript.CreateObject("Excel.Application") set exlBook = exlApp.Workbooks.Open ("C:\年賀状.xls",,True) exlApp.run "年賀状.xls!Main"

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

以下のようにブック名を付けてください。 exlApp.Run "年賀状.xls!Main"

UKUJIMA
質問者

お礼

ありがとうございます。 やはり開きません。 エクセルの年賀状.xlsのMainは、FUNCTION,PUBLIC SUB,SUB どれでもいいのでしょうか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

モジュール名つきで指示しましょう 標準モジュールなら exlApp.Run "Module1.Main" ワークシートのPublic Subプロシージャなら exlApp.Run "Sheet1.Main" といった具合で ・・・

UKUJIMA
質問者

お礼

ありがとうございます。 一瞬、エクセルが開いて閉じて終了します。ブックは開いてないようです。

関連するQ&A

  • VBスクリプトで指定したコマンドで日付を取得するには?

    お世話になります。 VBスクリプトがうまく設定できなくて困っています。 下記は日付取得までです。 rem #***************************************** Option Explicit dim w_date rem #***************************************** rem # STEP01 パラメータチェック rem #***************************************** IF WScript.Arguments.Count = 0 then WScript.Echo "Parameter_No" WScript.Quit 99 End IF IF IsNumeric(WScript.Arguments.Item(0)) = False then WScript.Echo "Numeric_Check_Error" WScript.Quit 99 End IF rem #***************************************** rem # STEP02 日付計算 rem #***************************************** w_date = replace(DateAdd("d",WScript.Arguments.Item(0), date),"/","") WScript.Echo w_date Script.Quit 0 【前提】 cip△dtコマンドをDOSで打つと例のように出力されます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、その1行目の日付を取得し、DOSの変数として保持したいです。 【前提】 cip△-dYYYYMMDDをDOSで打つとYYYYMMDDが入力した通りにでます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、前日の日付を取得し、DOSの変数として保持したいです。 どなたか助けてください。 宜しくお願いします。

  • Excelの終了について

    こんにちは。昨日もお世話になったguruguru2です。 早速質問なのですが、VBから新規Excelを起動したあとで、フォルダから既存のExcelファイルをダブルクリックで起動します。そのあとで、VBからExcelを終了する時、VBで起動したExcelのみを終了させたいのに、2つとも終了してしまいます。又、フォルダから起動するのではなく、スタートメニューからExcelを起動して、「ファイルを開く」で既存のファイルを開き、VBからExcelを終了するとVBで起動させたExcelのみ終了させることが出来ました。 どうしたら、前者の方法でVBで起動したExcelのみを終了させることが出来るのでしょうか。ソースも書きます。 Private Sub Excel起動() Dim objXls As Object On Error Resume Next Set objXls = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set objXls = CreateObject("Excel.Application") objXls.DefaultFilePath = mstrPath(最初に設定したパスです。) objXls.DisplayAlerts = False objXls.Workbooks.Add objXls.Visible = True End If AppActivate (objXls.Caption) Set objXls = Nothing Err.Clear End Sub Private Sub Excel終了() Dim objXls As Object On Error Resume Next Set objXls = GetObject(, "Excel.Application) If Err.Number = 0 Then     objXls.Quit End If Set objXls = Nothing End Sub わかりづらい説明ですみません。お願いします。

  • VBスクリプトで指定コマンドを使って日付の取得

    お世話になります。 VBスクリプトがうまく設定できなくて困っています。 下記は日付取得までです。 rem #***************************************** Option Explicit dim w_date rem #***************************************** rem # STEP01 パラメータチェック rem #***************************************** IF WScript.Arguments.Count = 0 then WScript.Echo "Parameter_No" WScript.Quit 99 End IF IF IsNumeric(WScript.Arguments.Item(0)) = False then WScript.Echo "Numeric_Check_Error" WScript.Quit 99 End IF rem #***************************************** rem # STEP02 日付計算 rem #***************************************** w_date = replace(DateAdd("d",WScript.Arguments.Item(0), date),"/","") WScript.Echo w_date Script.Quit 0 【前提】 cip△dtコマンドをDOSで打つと例のように出力されます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、その1行目の日付を取得し、DOSの変数として保持したいです。 【前提】 cip△-dYYYYMMDDをDOSで打つとYYYYMMDDが入力した通りにでます。 【例】 YYYY/MM/DD△00:00:00 cip~~~~~~~ 【実現したいこと】 VBスクリプトで、前日の日付を取得し、DOSの変数として保持したいです。 どなたか助けてください。 宜しくお願いします。

  • 【【大至急!!】】VB6.0(SP6)で任意のExcelのデータを参照する

    Windows2000環境で任意のエクセルが開かれた時に、GetObjectでxlAppをセットし、そのシートの値を参照するソースを作成しています。以前のURL http://oshiete1.goo.ne.jp/kotaeru.php3?q=1081151 を参考にそのままでは動作しなかったので、変更を加えました。しかし、依然として動作しません。 回答お願いします。 Do DoEvents For i = 0 To 1000 i = i + 1 Next i 'ここで、errmain.countupflagT2は2秒毎に立てる If errmain.countupflagT2 Then If xlApp Is Nothing Then On Error Resume Next Set xlApp = GetObject _ (, "Excel.Application") End If If xlbk Is Nothing Then On Error Resume Next Set xlbk = xlApp.ActiveWorkbook End If On Error Resume Next Set xlsh = xlbk.ActiveSheet If xlbk.ActiveSheet Is Nothing Then Else Judge End If If xlApp.Visible = False Then Set xlApp = Nothing Set xlbk = Nothing Set xlsh = Nothing End If End If Loop 上記のような感じで、エクセルが閉じた時には、逆の処理をしたいのですが・・・。 エクセルが起動しても、xlbk以降がSetできません。 xp環境ではそれなりに動いてますが。

  • VB6からのExcel起動について

    環境は WindowsXpSp3 Excel2002Sp3,Excel2003 VB6Sp6 です。 上記環境下で以下のコードの違いがよくわかりません。 Main1,Main2,Main3 で設定、処理方法(コーディング)、動作、終了(Excelオブジェクトの)の方法等で気をつけなければならないものが変わるのでしょうか。 もう一つ、 Set xlWorkbooks = xlApp.Workbooks についてですが、こちらは Set xlWorkbooks = new xlApp.Workbooks とするとエラーになります。 (Set xlApp = Excel.Application は New があってもなくてもエラーは出ません) この理由もわかりません。 インターネット上で色々検索はしてみたのですが、よくわかりませんでした。 ご存知の方、よろしくお願いいたします。 ------------------------------------------- Global xlApp As Excel.Application Global xlWorkbooks As Workbooks sub Main1() Set xlApp = Excel.Application Set xlWorkbooks = xlApp.Workbooks end sub sub Main2() Set xlApp = new Excel.Application Set xlWorkbooks = xlApp.Workbooks end sub sub Main3() set xlApp = CreateObject("Excel.Application") Set xlWorkbooks = xlApp.Workbooks end sub -------------------------------------------

  • VBからExcelを操作

    VisualBasic6.0(初心者) VBを始めたばかりで、Excelの入力文字をVBで変換しようと考えています。 様々な保管場所にあるExcelを開いて選択セルの文字をコマンドボタンで変換しようと下記コードを考えました。(一部) 問題は、Load時にすでに開いているExcelを閉じてまいます。 何か良い方法は無いでしょうか?(アクティブなExcelを操作したい) また、下記コードで不適切なところがありましたら御教授願います。 Private Sub Form_Load() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) Set xlApp = GetObject(, "Excel.Application") With xlApp.Selection Cells(1, 1).Value = "" End With xlApp.DisplayAlerts = False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub '----------------------(大文字変換) Private Sub CB2_Click() On Error Resume Next If ActiveCell.Row = Null Then MsgBox "Excel が見つかりません" Else Dim xlApp As Excel.Application Set xlApp = GetObject(, "Excel.Application") If Err.Number Then MsgBox "Excel が起動されていません" Else Dim X As Long Dim Y As Long Dim Hmae As String Dim Hgo As String X = 0 Y = 0 With xlApp.Selection Do Do Hmae = Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value Hgo = StrConv(Hmae, 1) Cells(ActiveCell.Row + X, ActiveCell.Column + Y).Value = Hgo X = X + 1 Loop Until X >= .Rows(.Rows.Count).Row - .Row + 1 X = 0 Y = Y + 1 Loop Until Y >= .Columns(.Columns.Count).Column - .Columns(1).Column + 1 End With End If xlApp.DisplayAlerts = False Set xlApp = Nothing End If End Sub

  • 既に開いているエクセルを閉じるには?

    既に該当のファイルが開いているのなら閉じたいのですが xlBook.Quitだとエラーになります。 Sub test1() Dim xlApp As Excel.Application Dim xlBook As Workbook Dim FileName As String FileName = "C:\test.xlsm" Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安 Set xlBook = xlApp.Workbooks.Open(FileName) If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら MsgBox "既にファイルが開いているので閉じます。" xlBook.Quit 'エラー 438 End If xlApp.Quit 'これって何のために必要? Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。 Set xlApp = Nothing End Sub と言うコードを作りました。 xlBook.Quitがダメならどのコードを使えばいいでしょう? また、 GetObject("", "Excel.Application") と言う開き方でいいのでしょうか? あと、 xlApp.Quit は何のために必要なのでしょう? タスクマネージーのプロセスを見ると、 Set xlApp = GetObject("", "Excel.Application") を通る時に新しいEXCEL.EXEが作成され、 Set xlApp = Nothing を通り過ぎる時に、そのEXCEL.EXEが消えます。 だから xlApp.Quit は不要ですか?

  • VBでVBAを起動

    こんにちは、VB初心者です。 VB6.0を使用しています。 VBからエクセルのVBAを起動させたいと思っています。 過去ログを参考にして下のようにして実行してみたのですが、 「実行時エラー'1004':マクロ'Keisan'が見つかりません。」 と、エラーが出てしまいVBAを起動することができません。 (ExcelVBAの関数(?)名はKeisan()です。) どうすればエラーを出さずに VBからVBAを起動させることができるのでしょうか? 何か参照し忘れていたり Callの以前に何かを宣言をしておかなければいけないのでしょうか? ******** Dim Wbook As Excel.Workbook Dim Exap As Excel.Application Set Wbook = GetObject("C:\テスト.xls") Set Exap = Wbook.Application     Call Exap.Run("Keisan")

  • VBSでフォルダ、ファイル作成時のエラーコード

    フォルダ、ファイルが存在しないとき、作成するスクリプトをVBSで作成していますが、疑問点があるのでご教示ください。 objFSO.CreateFolder、objFSO.CreateTextFileを実行が、正常に行われた場合、 Err.Numberに0がセットされると思っていましたが、実際は違っていました。 objFSO.CreateFolderでフォルダが作成される場合、Err.Numberに13が返されます。 objFSO.CreateTextFileでファイルが作成される場合、Err.Numberに438が返されます。 このスクリプトを実行後、フォルダ、ファイルが存在しない場合、作成されることも確認しています。 フォルダ作成後、作成されたフォルダに対して、ファイルの作成/データの書き込みのアクセス権を拒否にすると返されるErr.numberに70がセットされることも確認しています。 なぜ、フォルダ、ファイルが作成された場合、0が返されないのかご存知の方がいらっしゃいましたらご教示ください。 また、その情報が記載されている書籍およびサイトがあれば、お教えいただければ、幸いです。 Option Explicit Dim objFSO Dim objFile Const strFolderName = "C:\VBS" Const strFileName = "C:\VBS\test.txt" On Error Resume Next Set objFSO = CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then WScript.Echo "FSOオブジェクトを作成しました" Else WScript.Echo "FSOオブジェクトを作成できませんでした" WScript.Quit(1) End If If objFSO.FolderExists(strFolderName) Then WScript.Echo "フォルダが見つかりました" Else WScript.Echo "フォルダが見つかりませんでした" If objFSO.CreateFolder(strFolderName) Then If Err.Number = 13 Then WScript.Echo "フォルダを作成しました" Else WScript.Echo "フォルダを作成できませんでした" WScript.Quit(1) End If End If End If If objFSO.FileExists(strFileName) Then WScript.Echo "ファイルが見つかりました" Else Script.Echo "ファイルが見つかりませんでした" If objFSO.CreateTextFile(strFileName) Then If Err.number = 438 Then WScript.Echo "ファイルを作成しました" Else WScript.Echo "ファイルを作成できませんでした" WScript.Quit(1) End If End If End If

  • 起動しているIEをVBSで閉じるときの問題・・・

    VBスクリプトで起動しているIEを探し特定のサイトであればウィンドウを閉じたいのですがどのようにすればよいのでしょうか? Dim ObjIE Dim ObjShell Dim ObjWindow Dim WinExist WinExist = False Set ObjShell = CreateObject("Shell.Application") For Each ObjWindow In ObjShell.Windows If TypeName(ObjWindow.Document) = "HTMLDocument" Then WinExist = True Set ObjIE = ObjWindow End If Next Set ObjShell = Nothing If Not WinExist = True Then Set ObjIE = CreateObject("InternetExplorer.Application") End If If objIE.Document.URL = "http://www.yahoo.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.excite.co.jp/" Then objIE.quit End If If objIE.Document.URL = "http://www.google.co.jp/" Then ?????????? End If ・ ・ ・ 例えばディスプレイ上にYahoo、Excite、Googleのホームページがそれぞれ立ち上がっていたとします。 もしYahooがあれば閉じて次にExciteを探しあれば閉じて、次にGoogleのページがあればそのままにし後の処理を行わず終わらせたいのですが・・・もしGoogleが開いていればこれ以降の処理を全てすっ飛ばして終了にしたいのですが・・・ また、If thenを繰り返してばかりで汚いコードのような気もします。 これをやっていてYahoo、Excite、Google全て開いていた場合何故かエラーが出て終了してしまいます。 どなたかいい方法があれば教えて下さい。

専門家に質問してみよう