• ベストアンサー

ACCESSのVBAにてExcelのシートをコピーしたい

入庫.xlsに現在、"原紙"というシートがあります。 入庫.xlsには、"原紙"と入庫のあった日のシートがあるようにしたいのです。 今日、入庫があれば、入庫.xlsには "原紙"と"20"のシートが存在するようにしたいのです。 AccessのVBAにて1文でシートのコピーってできないでしょうか? Dim oApp As Object Dim StWk1 As String Dim SHizk As String Dim Hizk As Integer Hizk = DatePart("d", Me![入庫日付]) SHizk = CStr(Hizk) StWk1 = "c:入庫.xls" Set Xls = GetObject(StWk1) Xls.Application.Windows(1).Visible = True Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) Xls.Application.worksheets(SHizk).Activate 上記のように作成してみたのですが、実行すると、 Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) のところで、エラーになります。 実行エラー'9': インデックスが有効範囲にありません。 のメッセージが表示されます。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

Private Sub CmdCopySheet_Click()      'Dim xlApp As Excel.Application   'Dim xlBook As Excel.Workbook   'Dim xlSheet As Excel.Worksheet   Dim xlApp As Object   Dim xlBook As Object   Dim xlSheet As Object   Dim stFileName As String   Dim stSheetName As String   Dim lngCnt As Long      'ファイル名指定   stFileName = "C:\入庫.xls"      'コピーシート名指定   stSheetName = Format(Date, "dd")      'エクセル展開   'Set xlApp = New Excel.Application   Set xlApp = CreateObject("Excel.Application")   Set xlBook = xlApp.Workbooks.Open(stFileName)      'コピー先取得   For Each xlSheet In xlBook.Worksheets     If xlSheet.Name = stSheetName Then       If Len(stSheetName) = 2 Then         stSheetName = stSheetName & " (2)"       Else         stSheetName = Left(stSheetName, 2) & " (" & Val(Mid(stSheetName, 5)) + 1 & ")"       End If     End If     lngCnt = lngCnt + 1   Next      'シートコピー   Set xlSheet = xlBook.Worksheets("原紙")   xlSheet.Copy , xlBook.Worksheets(lngCnt)      'シート名変更   lngCnt = lngCnt + 1   Set xlSheet = xlBook.Worksheets(lngCnt)   xlSheet.Name = stSheetName      'エクセルファイルを閉じる   xlBook.Close (True)   xlApp.Quit      'オブジェクトの開放   Set xlSheet = Nothing   Set xlBook = Nothing   Set xlApp = Nothing      '完了メッセージ   MsgBox "シートをコピーしました"    End Sub 作成時は、参照設定で「Microsoft Excel *.* Object Library」にチェックをつけておくと楽ですよ 作成し終わったら、CreateObjectを使って参照設定を元に戻しておけば、バージョン違いのエクセルにも対応できます

その他の回答 (2)

回答No.2

Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) ですが、After は、コピーしたシートを After で指定したシートの後ろに挿入するということなんですが、実行時にまだ存在しないシートを指しているので、エラーになるようです。 Xls.Application.worksheets(SHizk).Activate も同様です。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

これって今書いているソースのコピペですか? パッと見ておかしいと思ったのは StWk1 = "c:入庫.xls"       ↓ StWk1 = "c:\入庫.xls"