|
素人の質問に付き合っていただきありがとうございます。
ファイルを開けない件は修正できました。
引き続きご教授いただきたいことがありますがまず目的を整理します。
・目的
folder1に生データのブックがたくさん入っている。ファイル名は昇順。
一方でソルバーを実行するためにテンプレートになるブック、ファイル名はtemplateを用意している。
生データのB列をテンプレートの同じくB列にコピペしたうえでソルバーを実行し、
このブックを生データと同じ名前でfolder2に保存する。
以上の操作を全ファイル分繰り返す。
・今できていないこと
計算後のファイルを生データと同じ名前を付けて保存することができていません。
下にコードを示しますが、エラーが出る行は、
wbT.Close True, folder2 & "\" & strWorkBookName 'テンプレートの結果を元のファイル名でフォルダ2に保存して閉じる
のところです。
ソルバー終了までは動いていることが確認できています。
お手数ですがよろしくお願いします。
Sub macro()
Dim folder1 As String
Dim folder2 As String
Dim template As String
Dim f As String
Dim wbT As Workbook
Dim wb As Workbook
Dim strWorkBookName As String
folder1 = "C:\Users\tsuruta\Documents\macro\folder1" 'フォルダ1
folder2 = "C:\Users\tsuruta\Documents\macro\folder2" 'フォルダ2
template = "C:\Users\tsuruta\Documents\macro\template.xlsm" 'テンプレートBook
f = Dir(folder1 & "\" & "1.xlsx") 'フォルダ1内の最初のBook名
Do While f <> "" 'Book名がある間
Set wbT = Workbooks.Open(template) 'テンプレートを開く
Set wb = Workbooks.Open(folder1 & "\" & "1.xlsx") '生データを開く
wb.Worksheets("Sheet1").Range("B:B").Copy '生データのBookのSheet1のB列の値をコピー
wbT.Worksheets("Sheet1").Range("B:B").PasteSpecial 'コピーした値をテンプレートのSheet1のB列にペースト
strWorkBookName = ActiveWorkbook.Name '生データのファイル名をコピー
wb.Close False '生データを保存せずに閉じる
'以下ソルバー実行
SolverReset
SolverOk SetCell:="$G$5", MaxMinVal:=2, ValueOf:=0, ByChange:="$J$3:$J$6", _
Engine:=1, EngineDesc:="GRG Nonlinear"
Application.DisplayAlerts = False
SolverSolve True
Application.DisplayAlerts = True
'ソルバー終了
wbT.Close True, folder2 & "\" & strWorkBookName 'テンプレートの結果を元のファイル名でフォルダ2に保存して閉じる
f = Dir 'フォルダ1内の次のBook名
Loop '繰り返す
End Sub
|
|