Option Explicit
Public Function MakeBook(aReturn As Workbook, Optional aSheetCnt As Long = 1) As Boolean
On Error GoTo Err
Application.SheetsInNewWorkbook = aSheetCnt
Set aReturn = Workbooks.Add
MakeBook = True
If logging Then AddLog "BookUtil.MakeBook", "INFO ", "シート数:" & aSheetCnt
Exit Function
Err:
If logging Then AddLog "BookUtil.MakeBook", "ERROR", "シート数:" & aSheetCnt & " / エラー内容:" & Err.Description
End Function
Public Function OpenBook(ByVal aFullPath As String, aReturn As Workbook) As Boolean
On Error GoTo Err
If InStr(aFullPath, "\") = 0 Then aFullPath = CurDir & "\" & aFullPath
Application.DisplayAlerts = False
If Not IsBookOpen(Dir(aFullPath)) Then
Set aReturn = Workbooks.Open(aFullPath)
Else
Set aReturn = Workbooks(Dir(aFullPath))
End If
OpenBook = True
If logging Then AddLog "BookUtil.OpenBook", "INFO ", "対象:" & aFullPath
GoTo Finally
Err:
If logging Then AddLog "BookUtil.OpenBook", "ERROR", "対象:" & aFullPath & " / エラー内容:" & Err.Description
Finally:
Application.DisplayAlerts = True
End Function
Public Function OpenBookByDialog(aReturn As Workbook) As Boolean
On Error GoTo Err
Dim fullPath As String: fullPath = Application.GetOpenFilename("Excel,*.xls?")
If fullPath = "False" Then GoTo Err
Application.DisplayAlerts = False
If Not IsBookOpen(Dir(fullPath)) Then
Set aReturn = Workbooks.Open(fullPath)
Else
Set aReturn = Workbooks(Dir(fullPath))
End If
OpenBookByDialog = True
If logging Then AddLog "BookUtil.OpenBookByDialog", "INFO ", "対象:" & fullPath
GoTo Finally
Err:
If logging Then AddLog "BookUtil.OpenBookByDialog", "ERROR", "対象:" & fullPath & " / エラー内容:" & Err.Description
Finally:
Application.DisplayAlerts = True
End Function
Public Function SaveBook(aWorkBook As Workbook) As Boolean
On Error GoTo Err
If IsReadOnly(aWorkBook) Then GoTo Err_ReadOnly
aWorkBook.Save
If logging Then AddLog "BookUtil.SaveBook", "INFO ", "対象:" & aWorkBook.Name
SaveBook = True
Exit Function
Err:
If logging Then AddLog "BookUtil.SaveBook", "ERROR", "エラー内容:" & Err.Description
Exit Function
Err_ReadOnly:
If logging Then AddLog "BookUtil.SaveBook", "ERROR", "対象:" & aWorkBook.Name & " / エラー内容:読み取り専用のため上書き保存できません"
End Function
Public Function SaveNewBook(aWorkBook As Workbook, ByVal aFullPath As String, Optional aIsOverWrite As Boolean) As Boolean
On Error GoTo Err
If InStr(aFullPath, "\") = 0 Then
If InStr(aFullPath, ".") = 0 Then
If InStr(aWorkBook.FullName, "\") = 0 Then
aFullPath = aFullPath & ".xlsx"
Else
aFullPath = aFullPath & Mid(aWorkBook.Name, InStrRev(aWorkBook.Name, "."))
End If
End If
aFullPath = CurDir & "\" & aFullPath
End If
If Not aIsOverWrite Then
If (Dir(aFullPath) <> "") Then GoTo Err_Exist
Else
Application.DisplayAlerts = False
End If
If InStr(aFullPath, ".xlsm") Then
aWorkBook.SaveAs Filename:=aFullPath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Else
aWorkBook.SaveAs Filename:=aFullPath
End If
SaveNewBook = True
If logging Then AddLog "BookUtil.SaveNewBook", "INFO ", "保存元:" & aWorkBook.Name & " / 保存先:" & aFullPath & " / 上書きモード:" & aIsOverWrite
GoTo Finally
Err_Exist:
If logging Then AddLog "BookUtil.SaveNewBook", "ERROR", "保存先:" & aFullPath & " / 上書きモード:" & aIsOverWrite & " / エラー内容:ファイルが既に存在します"
Exit Function
Err:
If logging Then AddLog "BookUtil.SaveNewBook", "ERROR", "保存元:" & aWorkBook.Name & " / 保存先:" & aFullPath & " / 上書きモード:" & aIsOverWrite & " / エラー内容:" & Err.Description
Finally:
Application.DisplayAlerts = True
End Function
Public Function SaveNewBookByDialog(aWorkBook As Workbook) As Boolean
On Error GoTo Err
Dim fullPath As String
Dim filterIndex As Long: filterIndex = 1
If InStr(aWorkBook.Name, ".xlsm") > 0 Then filterIndex = 2
If InStr(aWorkBook.Name, ".csv") > 0 Then filterIndex = 3
fullPath = Application.GetSaveAsFilename(FileFilter:="Excelファイル,*.xlsx,Excelマクロ,*.xlsm,CSVファイル,*.csv", filterIndex:=filterIndex)
If fullPath = "False" Then GoTo Err
Application.DisplayAlerts = False
If InStr(fullPath, ".xlsm") Then
aWorkBook.SaveAs Filename:=fullPath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Else
aWorkBook.SaveAs Filename:=fullPath
End If
SaveNewBookByDialog = True
If logging Then AddLog "BookUtil.SaveNewBookByDialog", "INFO ", "保存元:" & aWorkBook.Name & " / 保存先:" & fullPath
GoTo Finally
Err:
If logging Then AddLog "BookUtil.SaveNewBookByDialog", "ERROR", "保存先:" & fullPath & " / エラー内容:" & Err.Description
Finally:
Application.DisplayAlerts = True
End Function
Public Function CloseBook(aWorkBook As Workbook) As Boolean
On Error GoTo Err
aWorkBook.Close savechanges:=False
CloseBook = True
If logging Then AddLog "BookUtil.CloseBook", "INFO ", "対象:" & aWorkBook.Name
Exit Function
Err:
If logging Then AddLog "BookUtil.CloseBook", "ERROR", "エラー内容:" & Err.Description
End Function
Public Function IsBookOpen(aBookName As String) As Boolean
Dim wb As Workbook
For Each wb In Workbooks
If wb.Name = aBookName Then
IsBookOpen = True
Exit For
End If
Next
End Function
Public Function IsReadOnly(aWorkBook As Workbook) As Boolean
If aWorkBook.ReadOnly Then IsReadOnly = True
End Function