- ベストアンサー
AccessのVBAで、Excelのマクロを起動したい
環境 OS:XP OFFICE:2003 Accessで、同一フォルダにあるエクセルのマクロを起動したいのですが、どのようにコーディングすればよろしいでしょうか? フォルダ:C:\test Access:テストAccess.mdb Excel:テストExcel.xls 起動したいマクロ Sub all_delete() Sheets("シートA").Select Cells.Select Selection.Delete Shift:=xlUp End Sub よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ふと見ていて思ったことですが、Excel のRun all_delete で、マクロを走らせる理由がないと思います。Access から、全部行ってしまえばよいのではないでしょうか? もしも、シート名やファイル名が変わったりしても、元から変更できます。 それから、Delete Shift:=xlUp ということは、セル幅などを調整すると意味かしら? そうでなければ、Clear でよいと思います。 --------------------------------------------------------- Sub XlSheetDelMacro() Dim xlApp As Object Dim xlBook As Object Dim xlSheet As Object Dim AcPath As String Const XLFNAME As String = "Excel.xls" 'Excelファイル名 Const SHNAME As String = "シートA" AcPath = CurrentProject.Path & "\" On Error GoTo ErrHandler Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(AcPath & XLFNAME) xlApp.Visible = True '目で確認 Set xlSheet = xlBook.Worksheets(SHNAME) xlSheet.Cells.Clear xlBook.Close True '閉じる+保存 ErrHandler: If Err.Number > 0 Then MsgBox Err.Number & ": " & Err.Description, 16 End If Set xlSheet = Nothing '当面は不要 Set xlBook = Nothing '当面は不要 Set xlApp = Nothing '絶対必要 End Sub (プロセスでExcelが残らなければ成功)
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #2の回答者です。 >シートのクリアでなく、シートごと削除したいと思っています。 >マクロで行うと警告(確認)メッセージが表示されます こんな風に、DisplayAlerts を使います。 Set xlSheet = xlBook.Worksheets(SHNAME) Application.DisplayAlerts = False If xlBook.Worksheets.Count > 1 Then xlSheet.Delete End If Application.DisplayAlerts = True
お礼
なるほど! 今回つまづいているケース以外にも、応用が利きそうです。 ご回答、本当にありがとうございました。
- bonaron
- ベストアンサー率64% (482/745)
Dim xlApp As Object Dim xlBook As Object Dim stPath As String stPath = CurrentProject.Path & "\テストExcel.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(stPath) xlBook.Application.Run "all_delete" xlBook.Close Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing というところでしょうか。
お礼
すみません、追加質問の文は自力で解決できました。 ご回答いただき、本当にありがとうございました。
補足
bonaronさん、早々にご回答いただきありがとうございました。 質問直後に帰宅してしまったため、お礼が今になってしまい申し訳ありませんでした。 で、Wendy02さんへの補足にも書いたのですが、 エクセルのシートごと削除をするにはどのように記述すればよろしいですか?またその際に警告(確認)メッセージも表示されないようにしたいです。 (つまり全く手を触れないフルオートで処理を行いたい) よろしくお願いします。
補足
いつもお世話になっています。 なるほど、言われてみればAccessでコーディングする方が後々楽ですね。 一つ追加で質問なんですが、 >xlSheet.Cells.Clear ↑シートのクリアでなく、シートごと削除したいと思っています。 その場合、エクセルで手作業及びマクロで行うと警告(確認)メッセージが表示されますよね? このメッセージを表示させず、シートを削除するにはどうしたらよろしいでしょうか? すみませんが、よろしくお願いします。