- ベストアンサー
AccessでExcel出力
以前こちらでAccessからExcelファイルの操作方法を教えて頂き下記のように記述しているのですがC:\test.xlsのExcelファイルに何も出力されません。 又、エラーも出ません。 どこに誤りがあるか教えていただけますでしょうか。 長くなり大変申し訳ございませんが宜しく御願い致します。 ----------------------------------------------- Private Sub Command1_Click() On Error Resume Next Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String Dim xlSheet As Excel.Worksheet strExcelFile = "C:\test.xls" 'エクセルのファイル名 xlSheet = "aaaaa" 'ブックのシート名 Set objExcelApp = GetObject(strExcelFile, "Excel.Sheet") xlSheet.Cells(1, 1).Value = "12" With objExcelApp.Worksheets(xlSheet) With .Cells(1, 1) .Font.Size = 18 .Font.Name = "MS P明朝" .Font.Bold = True '太字の指定 End With .Cells(1, 1).ColumnWidth = 8 .Rows(1).RowHeight = 26 End With xlSheet.PrintOut objExcelApp.Application.Quit Set objExcelApp = Nothing DoCmd.Close End Sub -------------------------------------------------
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>インデックスが有効範囲にありません Excelのtest.xlsというファイルがC:\にあるのか? test.xlsにaaaaaというシートがあるのか? 確認してください。 VBEの参照設定でMicrosoftExcel??.?ObjectLibraryにチェックは入っていると思いますが一応確認してください。 C:\にtest.xlsがありaaaaaというシートがある場合は一度削除して新たにC:\にtest.xlsという同じ名前でファイルを作りシートもaaaaに名前を変更して作り直してください。 Excelのファイルを作り直してエラーが回避できるときもあります。 確認してみてください。
その他の回答 (4)
- bonaron
- ベストアンサー率64% (482/745)
> With objExcelApp.Worksheets(strExcelSheet) > エラー内容: > インデックスが有効範囲にありません。(Error 9) > なにが足りないのでしょうか? "C:\test.xls" に、 "aaaaa" というワークシートが存在しない、 以外に考えられませんが。
- O_cyan
- ベストアンサー率59% (745/1260)
下記ですんなりExcelから印刷かけられるはずですが・・ Private Sub Command1_Click() On Error Resume Next Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String strExcelFile = "C:\test.xls" 'エクセルのファイル名 strExcelSheet = "aaaaa" 'ブックのシート名 Set objExcelApp = GetObject(strExcelFile, "Excel.Sheet") objExcelApp.ActiveSheet.Cells(1, 1).Value = "12" With objExcelApp.Worksheets(strExcelSheet) With .Cells(1, 1) .Font.Size = 18 .Font.Name = "MS P明朝" .Font.Bold = True '太字の指定 End With .Cells(1, 1).ColumnWidth = 8 .Rows(1).RowHeight = 26 End With objExcelApp.Worksheets(strExcelSheet).PrintOut 'objExcelApp.Windows(1).Visible = True '特に必要なければ除いてください。 'objExcelApp.SaveAs "C:\test.xls" objExcelApp.Application.Quit Set objExcelApp = Nothing End Sub これで出力できるはずですがエラーになりますでしょうか。
補足
上記のコードをそのまま貼り付け、『On Error Resume Next』を外し実行したところ同じエラーが発生しました。 エラー行: With objExcelApp.Worksheets(strExcelSheet) エラー内容: インデックスが有効範囲にありません。(Error 9) なにが足りないのでしょうか? 申し訳ございませんが宜しく御願い致します。
- O_cyan
- ベストアンサー率59% (745/1260)
Dim xlSheet As Excel.Worksheetを除いて Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String へ xlSheet = "aaaaa" を strExcelSheet = "aaaaa" へ変更 xlSheet.Cells(1, 1).Value = "12" を objExcelApp.ActiveSheet.Cells(1, 1).Value = "12" へ変更 With objExcelApp.Worksheets(xlSheet) を With objExcelApp.Worksheets(strExcelSheet) へ変更 xlSheet.PrintOut を objExcelApp.Worksheets(strExcelSheet).PrintOut Dim strExcelSheet As StringとDim xlSheet As Excel.WorksheetでSheetの宣言を混在させないようにしてExcelFileをStringとしているならSheetもStringとして記述し統一させてやれば大丈夫です。
補足
早速の御回答ありがとうございます。 上記の方法で試してみましたが今度は下記のエラーが発生しました。 エラー行: With objExcelApp.Worksheets(strExcelSheet) エラー内容: インデックスが有効範囲にありません。(Error 9) どこがダメなのでしょうか? 宜しく御願い致します。
- bonaron
- ベストアンサー率64% (482/745)
間違いなく次の行でエラーは発生していますね。 > xlSheet = "aaaaa" 'ブックのシート名 > On Error Resume Next があるために、エラーを無視して動くフリをしてくれます。 場合によっては無限ループになったりしますから、 適切なエラー処理を書く自信がなければ、 特に、開発中には > On Error Resume Next はコメントにしておきましょう。 xlSheet を String にするか WorkSheet にするか 仕様をはっきりさせてからコーディングすること。
お礼
大変遅くなり申し訳ございません。 お陰様で無事に全て出力できました。お手数をお掛けしました。原因はExcelファイルに問題があったみたいです。 ありがとうございました。