仕事で必要に迫られて、というところで、いろいろ遊んでみたメモです。やりたかったことは次の通りです。
- マクロからファイルを開く
- ファイル内にある外部ファイルへの参照を更新する
- ファイルを上書き保存する
- ファイル名を日付けにして保存する
- ファイル内の数式をなくすために値貼り付けを行う
こんな感じです。余計なエラーメッセージはなるべく出ないようにしたのですが、すでに該当名のっファイルが存在する場合には勝手に上書きをしないようにしています。ただ、その際の処理は適当です。
MsgBox “開始します”
Workbooks.Open “C:**1.xlsx”
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
ActiveWorkbook.Close SaveChanges:=True
Workbooks.Open “C:**2.xlsx”
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
ActiveWorkbook.Close SaveChanges:=True
Workbooks.Open “C:**3.xlsx”
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
ActiveWorkbook.SaveAs Filename:= saveName
Application.DisplayAlerts = False
Dim i As Long
Dim SheetNames(3) As String
SheetNames(0) = “a”
SheetNames(1) = “b”
SheetNames(2) = “c”
SheetNames(3) = “d”
For i = 0 To 3
Sheets(SheetNames(i)).Range(“A1:CT50”).Copy
Sheets(SheetNames(i)).Range(“A1”).PasteSpecial Paste:=xlPasteValues
Next i
Worksheets(“e”).Delete
Worksheets(“f”).Delete
Worksheets(“g”).Delete
ActiveWorkbook.Close SaveChanges:=True
MsgBox “終了しました”
End Sub
以下は簡単な説明です
Workbooks.Open “C:**1.xlsx”
Excelのファイルを開いてアクティブにします。
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
Excelのファイル内にある外部参照をすべて更新します。複数のワークシートがあればすべて更新されます。
ActiveWorkbook.Close SaveChanges:=True
ファイルを上書き保存して閉じます。
ActiveWorkbook.SaveAs Filename:=”C:**4.xlsx”
ファイルを別名で保存します。
d = Day(Date)
saveName = “C:*”
saveName = saveName & Format(d, “00”) & “).xlsx”
ファイル名に日付を入れています。同様にして、年や月を入れることができます。
Application.DisplayAlerts = False
Application.DisplayAlerts = True
余計なメッセージをできるだけ表示しないようにしたり、あらためて表示するようにしたりします。
Sheets(kyoushitu(i)).Range(“A1:CT50”).Copy
Sheets(kyoushitu(i)).Range(“A1”).PasteSpecial Paste:=xlPasteValues
各ワークシートのファイル内の外部参照や数式になっているところを、値で上書きします。
Worksheets(“e”).Delete
ワークシートの削除をします。
MsgBox “***”
メッセージを表示して、クリックするまでその部分で止まるようになります。