IT

【VBA】ファイル操作クラス

ブックが開いているかどうか調べる

''' <summary>
''' ブックが開いているかどうか調べる
''' </summary>
''' <param name="strBookName">ブック名</param>
''' <returns>True / False</returns>
''' <see>http://officetanaka.net/excel/vba/tips/tips10.htm</see>
Public Function IsOpenBook(ByVal strBookName As String) As Boolean
    Dim Wb As Workbook
    For Each Wb In Workbooks
        If Wb.Name = strBookName Then
            IsOpenBook = True
            Exit Function
        End If
    Next Wb
End Function

シートが存在するかどうか調べる

''' <summary>
''' シートが存在するかどうか調べる
''' </summary>
''' <param name="Wb">ブック</param>
''' <param name="strSheetName">シート名</param>
''' <returns>True / False</returns>
''' <see>http://officetanaka.net/excel/vba/tips/tips10.htm</see>
Public Function SheetExists(ByVal Wb As Workbook, ByVal strSheetName As String) As Boolean
    Dim Sh As Worksheet
    For Each Sh In Wb.Worksheets
        If Sh.Name = strSheetName Then
            SheetExists = True
            Exit Function
        End If
    Next Sh
End Function

ファイルが存在するかどうか調べる

''' <summary>
''' ファイルが存在するかどうか調べる
''' </summary>
''' <param name="strFileName">ファイル名</param>
''' <returns>True / False</returns>
''' <see>http://officetanaka.net/excel/vba/file/file06.htm</see>
''' <remarks>Dir関数を使う方法</remarks>
Public Function FileExists(ByVal strFileName As String) As Boolean
    If Dir(strFileName) <> "" Then
        FileExists = True
    End If
End Function
''' <summary>
''' ファイルが存在するかどうか調べる
''' </summary>
''' <param name="strFileName">ファイル名</param>
''' <returns>True / False</returns>
''' <see>http://officetanaka.net/excel/vba/file/file06.htm</see>
''' <remarks>FileExistsメソッドを使う方法</remarks>
Public Function FileExistsFSO(ByVal strFileName As String) As Boolean
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(strFileName) Then
            FileExistsFSO = True
        End If
    End With
End Function

フォルダが存在するかどうか調べる

''' <summary>
''' フォルダが存在するかどうか調べる
''' </summary>
''' <param name="strDirName">フォルダ名</param>
''' <returns>True / False</returns>
''' <see>https://www.relief.jp/docs/excel-vba-check-folder-exists.html</see>
''' <remarks>Dir関数を使う方法</remarks>
Public Function FolderExists(ByVal strDirName As String) As Boolean
    If Dir(strDirName, vbDirectory) <> "" Then
        FolderExists = True
    End If
End Function
''' <summary>
''' フォルダが存在するかどうか調べる
''' </summary>
''' <param name="strDirName">フォルダ名</param>
''' <returns>True / False</returns>
''' <see>http://officetanaka.net/excel/vba/filesystemobject/filesystemobject11.htm</see>
''' <remarks>FolderExistsメソッドを使う方法</remarks>
Public Function FolderExistsFSO(ByVal strDirName As String) As Boolean
    With CreateObject("Scripting.FileSystemObject")
        If .FolderExists(strDirName) Then
            FolderExistsFSO = True
        End If
    End With
End Function

ファイルの一覧を取得する

''' <summary>
''' ファイルの一覧を取得する
''' </summary>
''' <param name="strDirPath">フォルダ名</param>
''' <returns>ファイルの一覧</returns>
''' <see>http://officetanaka.net/excel/vba/file/file07.htm</see>
''' <remarks>Dir関数を使う方法</remarks>
Public Function GetFileList(ByVal strDirPath As String) As String()
    Dim strFileName As String
    Dim intCnt As Integer
    strFileName = Dir(strDirPath & "*.xlsx")
    Do While FileName <> ""
        GetFileList(intCnt) = strFileName
        strFileName = Dir()
        intCnt = intCnt + 1
    Loop
End Function
''' <summary>
''' ファイルの一覧を取得する
''' </summary>
''' <param name="strDirPath">フォルダ名</param>
''' <returns>ファイルの一覧</returns>
''' <see>http://officetanaka.net/excel/vba/file/file07.htm</see>
''' <remarks>FileSystemObjectを使う方法</remarks>
Public Function GetFileListFSO(ByVal strDirPath As String) As String()
    Dim f As Object
    Dim intCnt As Integer
    With CreateObject("Scripting.FileSystemObject")
        For Each f In .GetFolder(strDirPath).Files
            GetFileListFSO(intCnt) = f.Name
            intCnt = intCnt + 1
        Next f
    End With
End Function

ブックを開く

''' <summary>
''' ブックを開く
''' </summary>
''' <param name="strFileName">ファイル名</param>
''' <returns>ブック</returns>
''' <see>http://officetanaka.net/excel/vba/file/file01.htm</see>
''' <remarks>最も安全にブックを開く方法</remarks>
Public Function WorkbooksOpen(ByVal strFileName As String) As Workbook
    'ファイル存在チェック
    If FileExists(strFileName) = True Then
        Exit Function
    End If
    '同名ブックチェック
    If IsOpenBook(strFileName) = True Then
        Exit Function
    End If
    'ここでブックを開く
    Set WorkbooksOpen = Workbooks.Open(strFileName)
End Function

コメント