【VBA】一番初めの処理に戻って、処理を繰り返す。
VBA初心者です。
コードはネットで調べて組み合わせて作っております。
今回は、組み合わせたコードで処理が終わってもフォルダ内のファイル数の数だけ処理を繰返したいです。
事前に作っているコードは、
①データ読み取りをしたいExcelを開く、別ブックを開いて該当のセルに入力。セル自体に数式が入っているので各シートに反映されます。
②inputboxで各シートの該当セルに表示させたい文字を入力。
③3、4枚目のシートを選択。
④名前をつけて保存する。
という作業のコードになっています。
①~④までを行った後に、データ数に応じて処理を繰返し行いたいです。
下記のコードにしたところ、Nextに対応するForがありません。とエラーが出ます。End Ifは追加しているのにエラーが起きるのはなぜでしょうか?
---下記 コード---
Sub マスターデータ取込03() '選択したファイルを取り込み、別のファイルに貼り付ける。
For Each f In fso.GetFolder(folderpath).Files
If fso.GetExtensionName Like "xls?" Then
Set wb = Workbooks.Open(f)
Dim RC As Integer
Dim OpenFileName, FileName, Path, SetFile As String
Dim wbMoto, wbSaki As Workbook
Set wbMoto = ActiveWorkbook 'マスターデータ取り込み元をセット
Application.DisplayAlerts = False
RC = MsgBox("マスターデータ取込みますか?", vbYesNo + vbQuestion, "確認")
If RC = vbYes Then
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
'ダイアログボックスを表示して、マスターデータファイルを指定します。
If OpenFileName <> "False" Then
SetFile = OpenFileName
Else
MsgBox "キャンセルされました"
Exit Sub 'マスターデータの取り込みをキャンセル
End If
Workbooks.Open FileName:=SetFile, ReadOnly:=True, UpdateLinks:=0
'ダイアログボックスで指定したマスターデータファイルを開きます。
Set wbSaki = Workbooks.Open(Path & SetFile)
'ワークブック間のシート「項目」をコピーします。
wbSaki.Worksheets("内訳書").Range("D:O").Copy
wbMoto.Worksheets("見積入力").Range("U7").PasteSpecial xlPasteValues
Application.CutCopyMode = False 'コピー切り取りを解除
wbSaki.Close False 'マスターデータ取り込み先のファイルを閉じる
Else
MsgBox "処理を中断します"
End If
Application.DisplayAlerts = True
Dim ans As String
ans = InputBox("見積書・請求書No", "", "")
If ans <> "" Then
wbMoto.Worksheets("見積").Range("I3").Value = ans
Worksheets("見積").Range("I3").Value = "VHM-" & ans
End If
Application.DisplayAlerts = True
ans = InputBox("見積書発行日", "", "")
If ans <> "" Then
wbMoto.Worksheets("見積").Range("F11").Value = ans
End If
ans = InputBox("完工日", "", "")
If ans <> "" Then
wbMoto.Worksheets("請求").Range("F11").Value = ans
End If
ans = InputBox("請求書発行日", "", "")
If ans <> "" Then
wbMoto.Worksheets("請求").Range("F12").Value = ans
End If
Worksheets(Array(2, 3)).Select ' 1 番目と 2 番目のシートを選択
Dim xFile
xFile = Application.GetSaveAsFilename( _
FileFilter:="Excelファイル, *.xlsm")
If TypeName(xFile) <> "Boolean" Then
ActiveWorkbook.SaveAs FileName:=xFile
End If
Next
End Sub
お礼
早々にご回答頂きありがとうございます。 コード自体は、標準モジュールに記載しているのですが、 思った様に希望のシートがアクティブになってくれないみたいです。 もう少し調べてみようと思います。