![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
入庫.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を使って参照設定を元に戻しておけば、バージョン違いのエクセルにも対応できます
No.2
- 回答日時:
Xls.Application.worksheets("原紙").Copy After:=Xls.Application.worksheets(SHizk)
ですが、After は、コピーしたシートを After で指定したシートの後ろに挿入するということなんですが、実行時にまだ存在しないシートを指しているので、エラーになるようです。
Xls.Application.worksheets(SHizk).Activate
も同様です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) 別ブックからシートのコピー 3 2022/04/01 20:07
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) エクセルVBA 既存エクセルを開きその中のシートとしてCSVファイルを開く 3 2023/05/31 13:11
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
ACCESSVBA からExcelの他ブックへコピーの方法
Visual Basic(VBA)
-
アクセスからエクセルのシートを追加して、名前をつける方法
Excel(エクセル)
-
アクセスVBAで既に開いているエクセルを閉じたい
Yahoo!ショッピング
-
-
4
Access VBAからExcelシートの削除
Excel(エクセル)
-
5
Access エクセルシート名変更
その他(プログラミング・Web制作)
-
6
アクセスvbaでエクセルブックを保存
その他(Microsoft Office)
-
7
Access VBAから使用したExcelプロセスを閉じる方法について
Visual Basic(VBA)
-
8
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
9
ACCESSのVBAにてExcelに行を追加したい
その他(データベース)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
12
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
13
「RunSQL」と「Execute」の違い
Access(アクセス)
-
14
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
15
ACCESS、VBAでEXCELファイルをコピーはできますか
その他(データベース)
-
16
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
17
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
18
ODBCの接続に失敗しました(3146)について
その他(Microsoft Office)
-
19
ACCESS VBAで作成済のExcelのコピーを作りたい
Visual Basic(VBA)
-
20
ACCESSのVBで、エクセルファイルの最終行を取得
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのVBAにてExcelのシ...
-
excelのInitializeイベントとAc...
-
テキストボックスに値を入れる...
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
UserForm1.Showでエラーになり...
-
教えて下さい
-
一つのTeratermのマクロで複数...
-
配列数式の解除
-
メッセージボックスのOKボタ...
-
エクセルで特定の列が0表示の場...
-
On ErrorでエラーNoが0
-
String""から型'Double'への変...
-
ExcelのVBA。public変数の値が...
-
Excel マクロ VBA プロシー...
-
エクセルに張り付けた写真のフ...
-
【VBAエラー】Nextに対するFor...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
Excelのマクロボタンをダブルク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelのInitializeイベントとAc...
-
ACCESSのVBAにてExcelのシ...
-
Excelマクロ 別シートへ連続コ...
-
エクセルVBAでブックの分割
-
オートシェイプの不具合について
-
EXCELで1シートのデータを複数...
-
「IsText」の使い方を教えてく...
-
エクセル2010の内容を次のシー...
-
VBA処理でこんな条件処理ってで...
-
「シートを削除しますか」のメ...
-
CSVファイルの読み込みVBA作成...
-
エクセル2007 マクロについて...
-
【VBA】3個のワークブックから...
-
エクセルVBAで名前の決まってい...
-
別のシートの文字列を他のシー...
-
ExcelVBAを使っての振り分け処理
-
VBAで繰り返し処理の速度を...
-
複数シート内容を1 シートに纏...
-
VBAでシートをまたぐ処理の方法
-
excel sheet の整理をしたいです
おすすめ情報