画面から別ブック起動について

このQ&Aのポイント
  • VBAで作成した画面から別のブックを開いてマクロ処理を実行したいが、うまくいかない状況です。別のブックを直接開くとマクロ処理は実行されますが、画面から開くと実行されません。
  • 画面から呼び出した別のブックは開くことができますが、マクロ処理が動作しません。
  • VBAを使用して作成した画面から別のブックを開いてマクロ処理を実行したいと思っていますが、うまくいきません。別のブックを直接開くとマクロ処理は正常に実行されますが、画面から開くと実行されません。
回答を見る
  • ベストアンサー

画面から別ブック起動についてです。

 いつもお世話になっております。  VBAで作成した画面(エクセルシートに貼り付いています)で別ブックを開いてマクロ処理を実行させたいのですが、うまくいきません。 (状態)  ・画面から呼び出した別ブックは開きますが、マクロ処理が走ってくれません。  ・別ブックを直接開くとマクロ処理は走ってくれます。 (画面のソース) Dim objAppXL As Excel.Application Set objAppXL = CreateObject("Excel.Application") objAppXL.Caption = ToukeiDay objAppXL.Visible = True objAppXL.Workbooks.Open Filename:="別ブックパス"  というような状況です。よろしくお願いします。

  • keyed
  • お礼率73% (17/23)

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

  • ベストアンサー
  • tosi0000
  • ベストアンサー率28% (8/28)
回答No.1

こんにちわ。 この場合には、CreateObject("Excel.Application") ですので、ブックを開いたと言うよりも、新たにexcelのプログラムを立ち上げていると思います。 タスクマネージャーで見てもexcel.exeが2本動いていると思います。 また、ウィンドウで見た時にも、新規のブック名は追加されていないと思います。 Workbooks.Open Filename:="別ブックパス" の記述だけであれば、ブックの立ち上げですので、マクロは動くと思いますが、何か特別な理由があって、別の方法を探していらっしゃると推測します。 したがって、excelアプリケーションプログラムを2本立ち上げて、その間でのやり取りをする必要があります。 不可能ではないと思いますが、excel立ち上げ時にマクロが自動的に動くようにするのが一番簡単と思いますので、VBAでThisWorkbooKオブジェクトに対して、以下の記述をしてはどうでしょうか? Private Sub Workbook_Open() Call 実行マクロ名 End Sub ファイル読み込み時に、自動的にマクロが動きます。 根本的な解決方法ではないのでだめかしら?

keyed
質問者

お礼

 ご回答、ありがとうございます。 Workbooks.Open Filename:="別ブックパス" の記述だけでマクロは動くんですね。>通常・・・。 でも、動かないのでtosi0000さんが教えてくれたThisWorkbookでCallをかけました。  うまくいきました。ありがとうございました。

関連するQ&A

  • ExcelVBA内のVBSで別ブックを開いたとき

    ブック1で、誰のPCからでもセキュリティの警告を出さないようにブック2を開くVBSを実行し、ブック1で使用した変数xの値をブック2に渡すということをやりたいのですが、上手くいきません...。 ブック2を開く所まではできたのですが、ブック2のセルに変数xの値を入れようとすると、エラー「インデックスが有効範囲にありません。」が発生し、そもそもブック2をアクティブにできません。 ファイル名・パス等は絶対に間違えていないと思います。 原因とどう修正すれば良いか、教えて頂けないでしょうか。 下記が簡略化したプログラムになります。 Book1のプログラム Sub Book1() Dim x As String x = "aaa" CreateObject ("Shell.Application") CreateObject("Shell.Application").ShellExecute "○○.vbs" Workbooks("Book2.xlsx").Sheets("Sheet1").Range("A1") = x End Sub ---------------------------------------------------------------------------------------------------------- VBSのプログラム Dim strExcFileName Dim objExcApp strExcFileName ="○○¥Book2.xlsx" Set objExcApp = WScript.CreateObject("Excel.Application") objExcApp.Visible = True Call objExcApp.Workbooks.Open(strExcFileName,,True) objExcApp.DisplayAlerts = False WScript.Quit 以上、宜しくお願い致します。

  • VBAで別ブックのシートを指定して削除したい。

    VBAで別ブックのシートを指定して削除したい。 エクセルでVBAを使用して、別ブックのシートを削除するアプリを作成しています。 これらのマクロを記述するエクセルとは別ブックのシートを削除したいです。 以下の記述だと、削除がされないようなのですがどのように記載したら 別ブックのシートを削除することが可能でしょうか。 エラー等は出ません。また、別ブックの情報も取ってこれているようですが、 削除ができません。。 どなたか教えてください。 'Excelを起動し、ファイルを開く Set xl = CreateObject("Excel.application") xl.Workbooks.Open fileName:=fileFullPath, ReadOnly:=False, IgnoreReadOnlyRecommended:=True '※fileFullPathがオープンするエクセルファイルです。 '"一覧"シートの1列目に「公開時削除」という文字が入っている行の2列目のテーブル名を取得 'シートの削除 Application.DisplayAlerts = False xl.ActiveWorkbook.Worksheets(deleteTableName).Delete   Application.DisplayAlerts = True   '※deleteTableNameは削除したいシートの名前が入ります。

  • 「もし既にファイルを開いているなら、開かない」

    おはようございます。 accessからExcelのブックを開く処理をしています。 VBAでファイルを開く時に、「もし既にファイルを開いているなら、開かない」 という行為をしたいのですが、どのようにすればいいでしょうか? *************************************************************************** Sub サンプル() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\【Excel】\料理.xlsm") xlApp.Visible = True'ファイルを開く?表示する? Set xlApp = Nothing Set xlBook = Nothing End Sub *************************************************************************** このコードの、 xlApp.Visible = Trueを、 if xlBook がまだ開いてない then xlApp.Visible = True Else End If のような事がしたいのですが、可能でしょうか? ご教授よろしくお願いします。

  • VBscriptでEXCELを起動

    今、非常に悩んでいる問題があります。 VBscriptでEXCELを起動したいのですがうまく行きません。 (Web画面であるボタンを押下すると、Webサーバ上のEXCELが開くというものです) プログラム的には (1) Dim excel Set excel = GetObject("", "Excel.Application") excel.Visible = True excel.Workbooks.Open "http://ホスト名/フォルダ名/ファイル名.xls" Set WK_excel = Nothing (2) Dim excel Set excel = CreateObject("Excel.Application") excel.Visible = True excel.Workbooks.Open "http://ホスト名/フォルダ名/ファイル名.xls" Set WK_excel = Nothing の二通り(他いろいろ)を試したのですが、何もおきずに終了します。 同じことをVB6.0でするとうまく行くのですが・・・ はっきり言うとVBscriptに関して知識がなく 質問内容も説明が分かりにくいかもしれませんが よろしくお願いいたします。

  • SETを使ったほうがよい?

    accwessからエクセルファイルを開きたいのですが、 App.Workbooks.Open と、 Set xlBook = xlApp.Workbooks.Open とどちらを使った方がいいのでしょうか? ////////////////////////////////////////////////////////// Private Sub ファイル1_Click() Dim App As Object Dim MyFileName As String MyFileName = "D:\My Documents\test.xls" Set App = CreateObject("Excel.Application") App.Workbooks.Open FileName:=MyFileName App.Visible = True End Sub でも Private Sub ファイル2_Click() Dim xlApp As Object Dim xlBook As Object Dim FileName As String Const FolderName = "D:\My Documents\test.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(FolderName & FileName) xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ////////////////////////////////////////////////////////// でも開けました。 多分、SETを使うかどうかの違いだと思うのですが VBAでコードを作る際、どちらのコードを使った方がいいか教えてください。

  • VB6からExcel出力し、ブックを閉じたとき異常終了

    Win98 FirstEdition VB6 SP3 Excel97 SR1 上記の環境において、下記のソースのように、VBからExcelを起動してデータを出力した際、Excelのブックを閉じると、「保存しますか?」の「はい」「いいえ」関わらず、あるいはブックをセーブした後閉じても、Excelが異常終了してしまいます。 ブックではなく、Excel自体を閉じた場合は全く問題ありません。 どなたか対処法をご存じな方いらっしゃいませんか? Dim objXls As Object Dim objBook As Object Dim objSheet As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Add objXls.Visible = False Set objBook = objXls.ActiveWorkbook Set objSheet = objBook.Worksheets(1) (中略) objXls.Visible = True

  • CreateObjectとGetObjectの違い

    当方エクセル2003です。 Sub test_CreateObject() Dim App As Excel.Application Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub --------------------------------------------------------- Sub test_GetObject() Dim App As Excel.Application Dim MyFileName As String Set App = GetObject(, "Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub この二つは何が違うのでしょうか? どちらも既存のエクセルファイルがが開きます。

  • ExcelVBAで他ブックのマクロを動かす

    Aというブックのマクロを動かし、別ブックのコマンドボタンに埋め込まれているマクロの動作を行いたいのですがうまく行きません。 下記がコードになります。 Option Explicit Public strName As String Public strPath As String Public xlApp As Object Public xlBook As Object Public xlSheet As Object Public Function テスト処理() 'ファイル名 strName = Worksheets("名前").Range("B2") 'ファイルを置いている場所 strPath = Worksheets("名前").Range("B3") Set xlApp = CreateObject("Excel.Application") '別Excelを開く Set xlBook = xlApp.Workbooks.Open(strPath, True) 'シートの選択 Set xlSheet = xlBook.Worksheets("操作画面") xlApp.Visible = True xlApp.UserControl = True xlSheet.Activate setブック処理 End Function Public Sub setブック処理() '別ブックのマクロを動かす Application.Run (strName & "!CmdClick"), ThisWorkbook   End Sub 上記のマクロを動かすと、Application.Runの部分で下記エラーが表示されます。 実行時エラー1004 '別ブック.xls'が見付かりません。ファイル名及びファイルの保存場所が正しいかどうか確認してください。 setで飛ぶ前に別のブックは開けているので、ファイル名や保存場所は正しいと思うのですがエラーが出てしまいます。 宣言の仕方が間違っているのでしょうか? ちなみに、別ブックのコマンドボタンのマクロは下記の名称なので、マクロ名の間違いという事も無いと思います。 Private Sub CmdClick() ~処理~ End Sub

  • VBAであるBOOKの「sample」というシートを別BOOKに

    VBAであるBOOKの「sample」というシートを別BOOKに 別Bookにコピーしたいのですが、 ネットを参考にして下記のようにするとエラーになります。 実行時エラー'9' 「インデックスが有効範囲にありません」 と表示されます。 どこが間違っているでしょうか? どなたか教えてください。 ---------------------------------------- Dim NewBook As Workbook Dim fName As String Set NewBook = Workbooks.Add fName = ThisWorkbook.Path & "cp.xls" NewBook.SaveAs Filename:=fName Workbooks("moto.xls").Sheets("ピッキング").Cells.Copy Workbooks(fName).Sheets("Sheet1").Paste Destination:=Cells(1, 1) '<---ここでエラー Workbooks(fName).Save ----------------------------------------

  • すでに開いているブックのマクロを起動させるvbsを教えてください

    お願いします。 00時から23時54分まで 常時開いていて、温度の数値をロギングしているexcelブックがあります。 1分おきにロギングし、10分おきに表に記録し、グラフ化しています。 エクセルを開き、閉じてOSを再起動、またエクセルを開く、を365日繰り返すものです。 基本的に常時無人です。 印刷、保存など、計7個の作業を Application.OnTime にて Workbook Open時にタイマーとしてマクロをかけてたのですが、 実行の信頼度が高くない(実行しない日がある)ので、 タスクスケジューラにて行おうとしました。 マクロを実行させるvbs Option Explicit Dim objxlsm Set objxlsm=CreateObject("Excel.Application") objxlsm.Workbooks.Open ("ブックパス) objxlsm.Run "Module11.DB保存" objxlsm.DisplayAlerts=False objxlsm.quit Set objxlsm = Nothing 以上を行うと、 今開いているブックではなく、保存されたブックを別で開き、そこのマクロを処理してしまいます。 現在開いているブックに処理をかける場合はどうしたらよいのでしょうか? このブックはリアルタイム(表内に1分おきに数値を更新します)に動いている表グラフなので、 なんとか、開いている(表示している)ブックで外部からマクロを実行したいのですが。。 ご教授ください。 ちなみに、このブックは、タスクスケジューラでvbsにて開いています。(関係ありますか?) おねがいします。

専門家に質問してみよう