- ベストアンサー
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': インデックスが有効範囲にありません。 のメッセージが表示されます。 教えてください。
- みんなの回答 (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)
- tsukasa-12r
- ベストアンサー率65% (358/549)
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk) ですが、After は、コピーしたシートを After で指定したシートの後ろに挿入するということなんですが、実行時にまだ存在しないシートを指しているので、エラーになるようです。 Xls.Application.worksheets(SHizk).Activate も同様です。
- papayuka
- ベストアンサー率45% (1388/3066)
これって今書いているソースのコピペですか? パッと見ておかしいと思ったのは StWk1 = "c:入庫.xls" ↓ StWk1 = "c:\入庫.xls"