.xls を .xlsx で保存

あるシステムからダウンロードしたExcelファイルが、拡張子「.xls」だった。一月に一ファイルで、3年分ある。なぜか開くのに時間が掛かるし、容量も大きい。

そこで、一つずつ開いては「.xlsx」で保存する地味な作業に突入して、二つ目で嫌になった。そうだ、マクロにやってもらおう。

f:id:Infoment:20190919222544p:plain

まずは、開いて閉じるところだけ作ろう。作戦は、こうだ。

  1. 受け取ったパスに存在するExcelファイルを開く
    開くとき、リンクは更新しない。
    また、元ファイル保護のため読み取り専用で開く。
  2. マクロが含まれているか否かを確認。
  3. 2.の結果によって、「.xlsx」または「.xlsm」で保存。
  4. 開いたファイルを閉じる。

今回は、以下のチェックを割愛した。

  1. ファイルの存在確認。無いものは開けない。
  2. 拡張子が「.xls」かどうかの確認。それ以外なら、開く必要がない。
  3. 保存するファイルの存在確認。既に存在するなら、上書きしてはいけない。

今日は取り敢えず、基礎工事だけ。上記チェックは、後日取り組む。

ということで上記を踏まえ、作成したのがこちら。

Function ToNewExtension(source_path As String) As String
    Dim Wb As Workbook
    Set Wb = Workbooks.Open(source_path, False, True)
        If Wb.HasVBProject Then
            Wb.SaveAs , xlOpenXMLWorkbookMacroEnabled
        Else
            Wb.SaveAs , xlOpenXMLWorkbook
        End If
        ToNewExtension = Wb.FullName
        Wb.Close
End Function

何かと必要になると思ったので、更新後のファイル名を返す関数にしてみた。
さて、ここからどう肉付けするか。

明日からまた、思案のしどころです。

参考まで。