• 締切済み

ACCESSでExcelマクロを起動

ACCESS、Excelの2003を使用しています。 常駐パソコンにACCESSプログラムを起動させておき、朝の6時になったらExcelの標準モジュールに記載しているマクロを起動し、開いたExcelを保存しようとしています。 以下ACCESSに記載しているマクロです。 If Format(Now(), "hh:nn") = "06:00" Then strXlsS = "D:\テスト用ファイル.xls" Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlbook = xlApp.Workbooks.Open(strXlsS) 'エラー箇所' Application.Run "テスト用ファイル!テスト" End If 実行時エラー2517 プロシージャを見つけることができません。 と、エラーが表示されてしまいます。 該当のExcelのブックは開けているのですが、モジュールのマクロを起動することが出来ません。 書き方がおかしいのでしょうか?

  • sefne
  • お礼率40% (2/5)

みんなの回答

回答No.4

Office2003は持ち合わせていないので2010でのお話です。 Excelの標準モジュールに Sub AccSub() '実際の処理の代わり MsgBox Sheets("ここにはシート名を").Cells(1, 1).Value End Sub Function AccFunc(ByVal a As Long, b As Long) As Long AccFunc = a + b End Function としました。標準モジュールですからExcelの何処からでも呼び出せます。 で、 Accessでは Sub UseXLProcedure() Dim XL As Object Dim BK As Object Set XL = CreateObject("Excel.Application") Set BK = XL.workbooks.Open("d:\DATA\123\マクロ.xls") XL.Windows(BK.Name).Visible = True XL.Visible = True 'False の場合メッセージボックスだけが出る。但し最前面にはならない ' XL.UserControl = True Call XL.Run(BK.Name & "!AccSub") 'XL.Visible = True とした場合には当方(Win7 & Office2010)では最前面となりました MsgBox "1+2は " & XL.Run(BK.Name & "!AccFunc", 1, 2) 'こっちのメッセージはアクセスからのですが画面遷移しないので 'タスクバーで手動でアクセスに切り替えてください XL.Quit Set BK = Nothing Set XL = Nothing End Sub ・・・での確認はしています! (プロシージャ名に全角文字を使っていないのは単にIMEの切り替えが面倒くさいためです。) (過去に全角中黒 ・ がダメ、詳細 というオブジェクトがダメ とか色々・・ありましたが) (Application.Run "テスト用ファイル!テスト" が ダメ なのは前回回答の説明のとおり。) (BK.Name にしてあるのはファイルのバージョン(XLS→XLSM)変更などを考慮したから) ただねー。Excelを立ち上げて行うのは少し回りくどいような気もします (^_^;) ゆくゆくはAccessでExcelをオートメーションで全て操作する方向へ持って行くのがベターかな。 そちらの状況が全く不明なので要らぬお節介かもしれませんけど・・・。 以下は道草的な独り言 (当方でも未体験ゾーンです。) >If Format(Now(), "hh:nn") = "06:00" Then・・・ は、PCがとてもビジーな時でも間違いなく実行されるだろうか? PCがスリープに入ってしまっていたら・・・? Accessファイルを開き忘れていたら・・・。 と考えるとタスクスケジューラを利用する方法も調べた方が良いかもですね。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

#1です。 > Application.Run "テスト用ファイル.xls!test" Runの記述は、モジュール名!プロシージャ名じゃなかったかな? モジュールが異なれば、同一プロシージャ名はアリの場合があるから。 (でないとForm毎に ボタン1_clickが宣言できない) 目的のモジュール名が対象ブック内でユニークなら、単にTESTだけで良さそう。 でも、標準モジュール上で、かつ、Publicなのかな? シート上で宣言してたらPrivateになるかも。

回答No.2

コード中の Application は自身の事を指しています。 Excel中なら Excel.Application Access中なら Access.Application になります。 なので、 Application.Run "テスト用ファイル!テスト" は MDBファイルの中の "テスト用ファイル!テスト" プロシージャを実行しなさい、 という意味になりますから、「そんなモノは無い!」と言われてしまいます。 せっかく、 Set xlApp = CreateObject("Excel.Application") としているのですから xlApp.Run "テスト用ファイル!テスト" としてみてください。 それと、どうやってXLSファイルを閉じているかが不明なので 杞憂かも知れませんが 処理がすべて終了した(Excelは一個も使っていない)状態でタスクマネージャで、Excel.exe が残っていないか 確認したほうが良いかも?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

モジュール・プロシージャ名の日本語使用を止めて、 Module1•subTESTとかにしてみて下さい

sefne
質問者

お礼

回答ありがとうございます。モジュールの方で日本語の使用を止めました。 モジュールは Sub test () という名前です。 Application.Run "テスト用ファイル.xls!test" に書き換えましたが、未だに実行時エラー2517が発生します。 ACCESSから上記のコードでExcelを自動に開くと、Application.Runの部分でエラーが発生します。 Dドライブに保存しているExcelファイルをダブルクリックして開いた状態で、ACCESSからApplication.Runを実行しても同一のエラーが発生します。 ACCESSから開いたExcelを対象に、他のExcelからApplication.Runを実行してもエラーが発生します。 しかし、Dドライブに保存しているExcelファイルをダブルクリックして開き、他ExcelからApplication.Runを実行すると正常に働きます。 ACCESS側から開く処理、ACCESS側のApplication.Runの処理がおかしいのでしょうか?

関連するQ&A

  • AccessからExcelの起動、Excel単独起動と違う動作になる。

    お世話になります。 Access2007からExcel2003を起動しようとしています。 実際には、AccessVBAより、以下のような呼び方をしています。 ----------------------------------- Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True xlApp.AutomationSecurity = 2 Set xlBook = xlApp.Workbooks.Open("C:\分析.xls") Set xlBook = Nothing Set xlApp = Nothing ----------------------------------- (手動で閉じる) 大体おおまかにこんな感じで作ってあります。 起動するExcelにはボタンが張り付けてあり 押すと処理が開始されます。 実際、起動そのものはされるのですが、同一ファイルにて 1.AccessからExcelを起動してボタンを押す 2.Excelを直接起動してボタンを押す の場合、Accessからの起動では、うまく処理が行われません。 直接起動でうまくいくので、ExcelのVBAの問題ではなく、 起動時の指定、または起動のやり方がまずいのでは、と とらえていますが、調べてもわからない状態が続いています。 (開き方や、マクロの呼び出し等方法を変えましたが  うまくいきません) Excelでは主に、ピポットテーブルを利用してPasteSpecialで値を 設定している作りになっています。 Access2007でもAccess2003でも同じだったと思います。 同様な経験をされ解決した方、方法をご存じの方、 ぜひ教えていただければと思います。

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

    既に該当のファイルが開いているのなら閉じたいのですが 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 は不要ですか?

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

    おはようございます。 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 のような事がしたいのですが、可能でしょうか? ご教授よろしくお願いします。

  • エクセルvba

    エクセルvbaなのですが Sub test() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) 'コード・・・ Set xlApp = Nothing Set xlBook = Nothing End Sub これだと Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) の部分で、エラーになります。 実行時エラー1004です。 自身ファイルをオブジェクトに格納して操作したいのですがどうすればいいでしょうか?

  • アクセスからエクセルファイルが開けない

    Cドライブに、新規 Microsoft Office Excel ワークシート.xlsxと言うファイルを作成しました。 そのうえで、アクセスから ―――――――――――――――――――――――――――――――― Sub できない1() Dim xlsWB As Object Set xlsWB = CreateObject("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlsWB.Application.Run xlsWB.Name Set xlsWB = Nothing End Sub ―――――――――――――――――――――――――――――――― をすると ------------------------ 実行時エラー '1004' マクロ'新規 Microsoft Office Excel ワークシート.xlsxを実行できません。 このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。 ------------------------ となります。 なので別の方法で開こうと、 ―――――――――――――――――――――――――――――――― Sub できない2() Dim xlApp As Excel.Application Dim xlBook As Excel.Application Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\新規 Microsoft Office Excel ワークシート.xlsx") xlApp.Visible = True Set xlApp = Nothing Set xlBook = Nothing End Sub ―――――――――――――――――――――――――――――――― にしたのですが、 実行時エラー’13’型が一致しません になります。 何がダメなのでしょう? マクロ付きファイルにしないとダメですか? もしくはファイル名に空白があるからエラーになるのでしょうか? そして、なぜ二つのコードのエラー内容がちがうのでしょう? それと、なぜか上記マクロを実行していると ~$新規 Microsoft Office Excel ワークシート.xlsx と言うファイルが出来上がります。(添付画像参照) でもファイルは開いていません。 この状態で、新規 Microsoft Office Excel ワークシート.xlsx をダブルクリックして開こうとすると、一瞬だけ画面に表れてすぐ消えます。 オフィスのバージョンは2007です。 ご回答よろしくお願いします。

  • Excel.Applicationへのシートコピー

    Public xlApp As Excel.Application Public xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") '非表示・画面更新無・アラート非表示 xlApp.Visible = False xlApp.ScreenUpdating = False xlApp.DisplayAlerts = False Set xlBook = xlApp.Workbooks.Add xlBook.SaveAs "test123.xls" '※ここでエラー Workbooks("TEST.xls").Sheets("TEST_1").Copy After:=xlApp.Workbooks(xlBook).Sheets(3) Set xlApp = Nothing Set xlBook = Nothing 環境:WindowXP SP2,Excel2003 SP3 以上のようにオブジェクト変数のEXCELに対してのシートコピーを行いたいのですが、コンパイルを行うとエラーがなく、実行すると「コンパイルエラー 修正候補:区切り記号 または(」とエラーが発生します。色々書き方を試してみたのですが、どれもうまくいきませんでした。 宜しくお願いします。

  • VBからエクセルを起動。そのあとエクセルを終了

    教えてください。 VBからエクセルを起動します。 そのあと、エクセルのシートの上にデータを貼り付けます。そして、エクセルを終了します。 しかし、エクセルが終了しません。 タスクバー上のエクセルをクリックすると終了します。 どうして、このような現象が起こるのかわかりません。 教えてください。 下記に同様のサンプルを書きました 誤記入があるかも知れませんが このような感じのプログラムです。 以上、よろしくお願いします。 public sub test Dim XApp as Excel.Application Dim nfilename as string Dim xlBook As Object Dim xlSheet As Object ' エクセルを起動 Set xlApp = New Excel.Application nfilename ="AAAA.xls" ' 指定されたファイルを開く Call xlApp.Workbooks.Open(nfilename) Set xlBook = xlApp.ActiveWorkbook Set xlSheet = xlBook.Worksheets(1) 'フォームを貼り付ける xlSheet.Range("a1").PasteSpecial      'ファイル名の作成 Filename="BBBB.xls" '保存 ChDir "C:\" xlBook.SaveAs Filename:=Filename,FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False Set xlSheet = Nothing xlBook.Close True Set xlBook = Nothing xlApp.Quit Set xlApp = 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

  • VB6.0上でExcelオブジェクトを生成

    VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As New Excel.Application Dim xlBook As New Excel.Workbook Dim xlSheet As New Excel.Worksheet Set xlApp = New Excel.Application Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets(1) と その2 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) と、どちらが良いのでしょうか? 開発環境は  Windows2000  VB 6.0  Excel 2003 です。

  • 教えてください

    簡単なことで済みません。 初心者なので分からずつまづいています。 教えてください。 下記のソースを実行するとエラーが出てきます。 「メモリーが不足しています」 「ファイルが見つかりません」 どう対処したらいいのでしょうか? Private Sub Command1_Click() On Error GoTo dbg: ' Excelのインスタンス作成 Set xlApp = CreateObject("Excel.Application") ' Excelを表示有無 xlApp.Visible = True ' マクロの警告やメッセージを表示しないように設定 xlApp.DisplayAlerts = False ' 指定したExcelファイルを開く Set xlBook = xlApp.Workbooks.open("D:\test.xls") ' Excelの終了 xlApp.Quit ' オブジェクトを解放 Set xlBook = Nothing Set xlApp = Nothing Exit Sub dbg: ' エラーメッセージを表示 MsgBox Err.Description End Sub

専門家に質問してみよう