※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

エクセルファイルを作成・操作・保存するクラス


  • ソース
Option Explicit

' EXS_ExcelFileObject
' エクセルでの新規ファイル作成・ファイルオープン・ファイル開閉・保存を行う
' Accessで使用する場合「Microsoft Excel Object Library」への参照設定を追加する

Private TemplateFileInfo As CMN_FileInfo
Private TargetFileInfo As CMN_FileInfo
Private fileObj As Workbook

Private Sub class_initialize()
    ' 1.属性の初期化
    Set TemplateFileInfo = New CMN_FileInfo
    Set TargetFileInfo = New CMN_FileInfo
End Sub

' SetTemplateFileInfo
' テンプレートファイルの情報を取得する
' 引数:あり
' iFileInfo :CMN_FileInfo    :ファイル情報
' 戻り値:なし
Public Function SetTemplateFileInfo(ByVal iFileInfo As CMN_FileInfo)
    Set TemplateFileInfo = iFileInfo
End Function

' SetTargetFileInfo
' 操作対象ファイルの情報を取得する
' 引数:あり
' iFileInfo :CMN_FileInfo    :ファイル情報
' 戻り値:なし
Public Function SetTargetFileInfo(ByVal iFileInfo As CMN_FileInfo)
    Set TargetFileInfo = iFileInfo
End Function

' OpenFile
' エクセルファイルを開く
' 引数:なし
' 戻り値:なし
Public Function CreateNewFile()
    If TemplateFileInfo.GetFileName <> "" Then
        Set fileObj = Excel.Application.Workbooks.Add(TemplateFileInfo.GetFilePath & TemplateFileInfo.GetFileName)
    Else
        Set fileObj = Excel.Application.Workbooks.Add
    End If
End Function

' SaveNewFile
' 新規ファイルとしてエクセルファイルを保存する
' 保存形式は、エクセルのバージョンと、保存ファイル名の拡張子から自動決定する
' 引数:なし
' 戻り値:なし
Public Function SaveNewFile()
    Dim appVersion As Long
    
    ' 1.エクセルのバージョン取得
    appVersion = CLng(Excel.Application.Version)
    
    ' 2.バージョン別・拡張子別に保存方法を選択
    If appVersion < 12 Then
        'a.バージョンは2003以前
        If Right(TargetFileInfo.GetFileName, 4) = ".xls" Then
            '(1).拡張子が「.xls」
            ' FileFormatの設定値=43(XlFileFormat.xlExcel9795)
            fileObj.SaveAs FileName:=TargetFileInfo.GetFilePath & TargetFileInfo.GetFileName, FileFormat:=43
        End If
    Else
        'a.バージョンは2007以降
        If Right(TargetFileInfo.GetFileName, 4) = ".xls" Then
            '(1).拡張子が「.xls」
            ' FileFormatの設定値=56(XlFileFormat.xlExcel8)
            fileObj.SaveAs FileName:=TargetFileInfo.GetFilePath & TargetFileInfo.GetFileName, FileFormat:=56
        ElseIf Right(TargetFileInfo.GetFileName, 5) = ".xlsx" Then
            '(2).拡張子が「.xlsx」
            ' FileFormatの設定値=51(XlFileFormat.xlOpenXMLWorkbook)
            fileObj.SaveAs FileName:=TargetFileInfo.GetFilePath & TargetFileInfo.GetFileName, FileFormat:=51
        End If
    End If
    
End Function

' OpenFile
' エクセルファイルを開く
' 引数:なし
' 戻り値:なし
Public Function OpenFile()
    Dim bookObj As Workbook
    Dim isOpenFlg As Boolean
    
    ' 1.フラグを初期化
    isOpenFlg = False
    
    ' 2.指定名のブックが開かれている場合フラグをTRUEにする
    For Each bookObj In Excel.Application.Workbooks
        If bookObj.Name = TargetFileInfo.GetFileName Then
            isOpenFlg = True
            Exit For
        End If
    Next bookObj
    
    ' 3.フラグがFALSEの場合ファイルを開く
    Set fileObj = Nothing
    If isOpenFlg = False Then
        Set fileObj = Excel.Application.Workbooks.Open(TargetFileInfo.GetFilePath & TargetFileInfo.GetFileName)
    Else
    ' 4.既に開かれている場合、指定ファイルのオブジェクトを取得する
        Set fileObj = Excel.Application.Workbooks(TargetFileInfo.GetFileName)
    End If
End Function

' SaveFile
' 開いているエクセルファイルを上書き保存する
' 引数:なし
' 戻り値:なし
Public Function SaveFile()
    ' 1.ファイルが存在する場合、ファイルを上書き保存
    If Not fileObj Is Nothing Then
        fileObj.Save
    End If
End Function

' CloseFile
' 開いているエクセルファイルを閉じる
' 引数:なし
' 戻り値:なし
Public Function CloseFile()
    ' 1.ファイルが存在する場合、ファイルを閉じる(保存しない)
    If Not fileObj Is Nothing Then
        fileObj.Close SaveChanges:=False
    End If
    Set fileObj = Nothing
End Function