• 締切済み

【問題】ACCESSからEXCEL雛形(帳票レイアウト)を開き、データ

【問題】ACCESSからEXCEL雛形(帳票レイアウト)を開き、データをセットして名前を付けて保存する流れですが、データセット時に「実行時エラー'13'型が一致しません。」が出て処理が止まります。 【詳細】 ACCESS2003 SP3 と EXCEL2003 SP3を使用しています。 簡単に説明しますと、ACCESSのフォームで集計条件を入力し実行ボタンを押下した後、ACCESSでデータの集計処理を行い、EXCEL雛形(帳票レイアウト)を開き、データをセットして名前を付けて保存する流れですが、処理が戻ってきません。データをセットする処理の前にMSGBOXを入れ"F8"で1ステップ毎に処理を進めますとセット1行目から「実行時エラー'13'型が一致しません。」が出て処理が止まります。 また、タスクマネージャのプロセスに"EXCEL.EXE"が常駐したままとなり、終了させるまでEXCEL雛形(帳票レイアウト)を開く事ができません。 【PG】 Private Sub 出力_Click() Dim DB As Database, X Set DB = CurrentDb() DoCmd.SetWarnings False Me!SUB01.SourceObject = "F_処理中" Me!SUB01.Requery X = 帳票出力A01(Me!表番号, Format(Me!年度, "yyyy"), Me!番号, Me!ファイル名, Me!シート名) Me!SUB01.SourceObject = "F_MASK" End Sub Public Function 帳票出力A01(表番号, 年度, 番号, ファイル名, シート名) ' On Error GoTo ERR_帳票出力A01 Dim DB As Database, T As Recordset, パス, 処理日時, X, i Set DB = CurrentDb() DoCmd.SetWarnings False 処理日時 = Format(Now(), "yyyymmddhhnnss") '<< 出力データ準備 >> X = 出力集計用(年度) Set T = DB.OpenRecordset("W_集計結果") If T.EOF Then MsgBox "出力可能データが存在しません。" Exit Function End If '<< EXCELへ書き出し >> パス = CurrentProject.Path Dim xlApp As Excel.Application Dim xlWkb As Excel.Workbook Dim xlWst As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlWkb = xlApp.Workbooks.Open(パス & "\帳票出力レイアウト\" & ファイル名) Msgbox("この後エラーとなる。") xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号  ←←← この行でエラー発生 xlWkb.Sheets(シート名).Cells(5, 4).Value = Format(CVDate(年度 - 1 & "/04/01"), "gggee年度") xlWkb.Sheets(シート名).Cells(5, 8).Value = Format(CVDate(年度 & "/04/01"), "gggee年度") xlWkb.Sheets(シート名).Cells(5, 12).Value = Format(CVDate(年度 + 1 & "/04/01"), "gggee年度") ----- 集計結果をEXCELに貼り付ける処理など以降省略 ----- よろしくお願い致します。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

#4の続きですが、 関数の型宣言を追加するだけです。#3での変更は たとえなので、同じように変更する必要はありません。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

>(シート名) >ではなく、 >("シート名") >では? >あるいは、 >xlWkb.ActiveWorkbook.Sheets("シート名").Cells(1, 16).Value 意図が伝わっていなかったので明確に書きますと、 Public Function 帳票出力A01(表番号, 年度, 番号, ファイル名, シート名) の関数の引数の型を明記していないのがエラーの原因です。 したがって、シート名以外は推測ですが、 Public Function 帳票出力A01(表番号 As Long, 年度 As String, 番号 As Long, ファイル名 As String, シート名 As String) のように、型を明記してください。本質問の場合はシート名の 引数の型が明記されていないのが原因です。 他にも変数宣言、型宣言でエラーが出そうなところは ありますが。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

>xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号 において、 (シート名) ではなく、 ("シート名") では? あるいは、 xlWkb.ActiveWorkbook.Sheets("シート名").Cells(1, 16).Value >スクマネージャのプロセスに"EXCEL.EXE"が常駐したまま これは、 >----- 集計結果をEXCELに貼り付ける処理など以降省略  に問題が隠されたいると思うのですが、きちんと使った オブジェクトは破棄して立つ鳥あとを濁さず、です。 オブジェクトの階層の下流から順次破棄していきます。 xlWkb.Close Set xlWkb = Nothing xlApp.Quit Set xlApp = Nothing

NOAH-1
質問者

補足

>xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号 において、(シート名)ではなく、("シート名")では?  → 「シート名」は引数ですので問題はないかと。”A1”とか”A2”等のシート名が格納されます。 に問題が隠されたいると思うのですが、きちんと使った オブジェクトは破棄して立つ鳥あとを濁さず、です。 オブジェクトの階層の下流から順次破棄していきます。 xlWkb.Close Set xlWkb = Nothing xlApp.Quit Set xlApp = Nothing  → >----- 集計結果をEXCELに貼り付ける処理など以降省略 の中に記述しておりますが、    xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号 の行でフリーズし、先に進めてない様です。  

回答No.2

>xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号 まずはここのエラー発生箇所前に、デバッグコードを追加 Set xlWst = xlWkb.Worksheets(1) If (xlWst.Name = シート名) Then   Call MsgBox("シート名があっている") Else   Call MsgBox("シート名が異なる" & vbCrLf & vbCrLf & xlWst.Name & vbCrLf & シート名) End If それと >EXCEL雛形(帳票レイアウト)を開き、データをセットして名前を付けて保存 であれば、雛形を直接オープンしない方がいいです。 >Set xlWkb = xlApp.Workbooks.Open(パス & "\帳票出力レイアウト\" & ファイル名) ↓ Set xlWkb = xlApp.Workbooks.Add(パス & "\帳票出力レイアウト\" & ファイル名) >プロセスに"EXCEL.EXE"が常駐 On Error Goto ほげほげ でエラーが発生した場合のコードを追加し、異常が発生したときにもExcelが閉じられるようにしてあげないと、プロセスが残ります。 [On Error Goto]←これがキーワード あ~だこ~だと言わなくても、これについてはいっぱい履歴があります。 自身でそれは学んでください。 あと開発中は安定するまで Set xlApp = CreateObject("Excel.Application") の後に xlApp.Visible = True をつけて、Excelを表示させてやると、少しだけ楽チンです。

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

> xlWkb.Sheets(シート名).Cells(1, 16).Value = 番号  ←←← この行でエラー発生 このときの各変数の値はどうなってますか? xlWkb シート名 xlWkb.Sheets(シート名).Cells(1, 16).Value 番号

NOAH-1
質問者

補足

早々の回答有難う御座います。 各変数の値は、項目の上にマウスカーソルを持ってくると、 シート名では "A0(1)" 番号では "11" と表示されます。 EXCELには、"A0(1)"・"A0(2)"・"A1"・"A2"・"A3"の5つのシートが存在していますが、 シート名を指定しての値代入ではエラーとなります。 シートインデックスでの値の代入は問題なく行えるみたいです。 xlWkb.Sheets(1).Cells(1, 16).Value なぜ、シート名ではエラーなのかが分かりません。

関連するQ&A