
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のブックは開けているのですが、モジュールのマクロを起動することが出来ません。
書き方がおかしいのでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
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ファイルを開き忘れていたら・・・。
と考えるとタスクスケジューラを利用する方法も調べた方が良いかもですね。
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 が残っていないか
確認したほうが良いかも?
No.1
- 回答日時:
モジュール・プロシージャ名の日本語使用を止めて、
Module1•subTESTとかにしてみて下さい
回答ありがとうございます。モジュールの方で日本語の使用を止めました。
モジュールは 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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSエラー「モジュールがあ...
-
●ACCESS→Excelのエクスポート(...
-
【Excel】[Expression.Error] ...
-
Accessのmdb分析(解析)方法ま...
-
Accessで以下のシステムを1か...
-
特定のエクセルファイルを起動...
-
Access2003 デザインモードで...
-
.dbfファイルの急増
-
エクセルで縦のカラムデータを...
-
VBAでCSVファイルが使用中かど...
-
ThunderbirdのメールをCSVでま...
-
アクセスでcsvに出力した際、頭...
-
アクセスクエリ(複数)→マクロ...
-
タブ区切りデータからダブルコ...
-
月が変わったら自動でシートが...
-
mdbファイル フォームを開くと...
-
DocuWorksでの印刷
-
テキストボックス名を変数で指...
-
Access2007のエキスポートについて
-
accessのmdbが勝手にできている?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSエラー「モジュールがあ...
-
●ACCESS→Excelのエクスポート(...
-
mdbファイル開けない
-
【access】マクロファイルのコ...
-
ACCESSでExcelマクロを起動
-
【Excel】[Expression.Error] ...
-
Accessで以下のシステムを1か...
-
Becky!で「メールサーバーへの...
-
SQLPLUSで結果を画面に表示しない
-
100万行のCSVを10万行ずつのフ...
-
【CSVファイル】先頭の文字列に...
-
#1062 - '0' は索引 'PRIMARY' ...
-
アクセスクエリ(複数)→マクロ...
-
エクセルで縦のカラムデータを...
-
selectした結果の余計な余白を...
-
特定のエクセルファイルを起動...
-
共有フォルダに誰が何にアクセ...
-
【アクセス】「ほかのユーザー...
-
オラクル(PL/SQL)のエラー
-
「○○○.ldb」のAccess レコード ...
おすすめ情報