ファイル名の作成
ファイル名に使用する文字の問題については他の方々からも指摘がある通りです。
/
などの禁則文字を使用しなければ保存できるようになると思います。
また、フォルダ名の取得方法についてExcelVBAerさんからもアドバイスがありますが、後に元ファイルを削除する予定があるのならブックからパスを取得した方が確実だと思います。
例えばC:\Work\test.xlsm
の場合、
・WorkBook.Name ⇒ブック名(test.xlsm
)
・WorkBook.Path ⇒パス名(C:\Work
)
・WorkBook.FullFileName ⇒フルパス名(C:\Work\test.xlsm
)
といった具合に取得できます。
新ファイルのフルパスは「元ファイルのパス名」と「セル値から作成したファイル名」を組み合わせて作り出すことになります。
これは自分でがんばって作りあげてもいいのですが、FileSystemObjectのBuildPathを利用した方が確実です。
パスの最後に\
がついているか?など気にせずにフルパスを作成できます。
元ファイルの削除
元ファイルの削除についてですが、SaveAs
で別名保存できた場合、開いているブックも元ブックから新ブックに変更され、この時点で元ブックは解放された状態となっています。
この状態ならsaziさんご紹介のサイトのように「読み取り専用」に変更しなくてもKill
することができると思います。
開いているブックを別名保存せずに削除したい場合は「読み取り専用」にすることで削除できますが、ブックが開かれて見えているのに実態のファイルは存在しなくなっているという、いかにも気持ちの悪い状態になりますのでオススメはしません。
サンプル
Sub Sample()
'ファイル操作用にFileSystemObjectを作成
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'ブックの格納
Dim wbOld As Workbook 'ブック(元)
Set wbOld = ThisWorkbook
'元ブックからパスを取得
Dim strPath As String
strPath = wbOld.Path
'ファイル名
Dim strOldFile As String 'ファイル名(元)
Dim strNewFile As String 'ファイル名(新)
'元ファイル名はブックから取得
strOldFile = wbOld.Name
'新ファイル名はセル値から作成
strNewFile = Format(wbOld.Worksheets("入金").Cells(6, "A"), "yyyymmdd") & ".xlsm"
Dim strOldFullPath As String 'フルパス(元)
Dim strNewFullPath As String 'フルパス(新)
strOldFullPath = wbOld.FullName '元ブックからフルパスを取得
strNewFullPath = fso.BuildPath(strPath, strNewFile) '新ファイルのフルパスはパスとセル値から作成
'新旧ファイル名の確認
'MsgBox strOldFullPath & vbCr & "↓" & vbcr & strNewFullPath
'※新旧同一ファイル名になる場合はここらで中断させた方がいいです。
'元ブックを新ブック名で別名保存
wbOld.SaveAs strNewFullPath
'元ブックを削除
Kill strOldFullPath
End Sub
参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/16 06:29
2018/02/16 07:04