VBA文件处理

Option Explicit

' ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽
' Excel对象
' △△△△△△△△△△△△△△△△△△

' Open
Public Function FileOpen_ByExcel(ByVal FileName As String, ByRef Target As Workbook) As Boolean

    On Error GoTo OpenFileError
    
    Set Target = Workbooks.Open(FileName:=FileName, ReadOnly:=False)
    FileOpen_ByExcel = True
    Exit Function
    
OpenFileError:
    FileOpen_ByExcel = False
    
End Function

' Save
Public Function FileSave_ByExcel(ByVal FileName As String, ByVal Target As Workbook) As Boolean

    On Error GoTo SaveFileError
    
    If FileName = "" Then
        Target.Save
    Else
        Target.SaveAs FileName:=FileName
    End If
    FileSave_ByExcel = True
    Exit Function
    
SaveFileError:
    FileSave_ByExcel = False
    
End Function


' Close
Public Function FileClose_ByExcel(ByVal Target As Workbook) As Boolean

    On Error GoTo FileCloseError
    
    Target.Close savechanges:=False
    FileClose_ByExcel = True
    Exit Function
    
FileCloseError:
    FileClose_ByExcel = False
    
End Function



' ▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽
' FileSystemObject
' △△△△△△△△△△△△△△△△△△

' Folder
' CreateFolder
Public Function FolderCreate_ByFSO(ByVal FolderName As String, ByVal DeleteFlg As Boolean) As Boolean

    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    On Error GoTo FolderCreateError
    
    If FSO.FolderExists(FolderName) Then
        If DeleteFlg Then
            FSO.DeleteFolder (FolderName)
        Else
            Set FSO = Nothing
            FolderCreate_ByFSO = True
            Exit Function
        End If
    End If
    
    Dim ParentFolderName As String
    ParentFolderName = FSO.GetParentFolderName(FolderName)
    If FSO.FolderExists(ParentFolderName) = False Then
        If FolderCreate_ByFSO(ParentFolderName, False) = False Then
            GoTo FolderCreateError
        End If
    End If
    
    FSO.CreateFolder (FolderName)
    Set FSO = Nothing
    FolderCreate_ByFSO = True
    Exit Function
    
FolderCreateError:
    Set FSO = Nothing
    FolderCreate_ByFSO = False
    
End Function

' CreateFile
Public Function FileCreate_ByFSO(ByVal FileName As String, ByVal DeleteFlg As Boolean) As Boolean

    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    On Error GoTo FileCreateError
    
    If FSO.FileExists(FileName) Then
        If DeleteFlg Then
            FSO.DeleteFile (FileName)
        Else
            Set FSO = Nothing
            FileCreate_ByFSO = True
            Exit Function
        End If
    End If
    
    Dim ParentFolderName As String
    ParentFolderName = FSO.GetParentFolderName(FileName)
    If FSO.FolderExists(ParentFolderName) = False Then
        If FolderCreate_ByFSO(ParentFolderName, False) = False Then
            GoTo FileCreateError
        End If
    End If
    
    FSO.CreateTextFile (FileName)
    Set FSO = Nothing
    FileCreate_ByFSO = True
    Exit Function
    
FileCreateError:
    Set FSO = Nothing
    FileCreate_ByFSO = False
    
End Function
'
'' OpenTextFile
'Public Function OpenTextFile_ByFSO(ByVal FileName As String) As String
'
'    Const ForReading As Integer = 1
'    Const CreateFlgFalse As Boolean = False
'
'    Dim FSO As Object, TextFile As Object, TextStr As String
'    Set FSO = CreateObject("Scripting.FileSystemObject")
'
'    On Error GoTo OpenTextFileError
'
'    Set TextFile = FSO.OpenTextFile(FileName, ForReading, CreateFlgFalse)
'    TextStr = TextFile.Readall
'
'    TextFile.Close
'    Set FSO = Nothing
'
'    OpenTextFile_ByFSO = TextStr
'    Exit Function
'
'OpenTextFileError:
'
'    TextFile.Close
'    Set FSO = Nothing
'    OpenTextFile_ByFSO = ""
'
'End Function
'
'' OpenTextFile
'Public Function WriteTextFile_ByFSO(ByVal FileName As String, ByVal Buffer As String) As Boolean
'
'    If FileCreate_ByFSO(FileName, True) = False Then
'        WriteTextFile_ByFSO = False
'        Exit Function
'    End If
'
'    Const ForWriting As Integer = 2
'    Const CreateFlgTrue As Boolean = True
'
'    Dim FSO As Object, TextFile As Object
'    Set FSO = CreateObject("Scripting.FileSystemObject")
'
'    On Error GoTo OpenTextFileError
'
'    Set TextFile = FSO.OpenTextFile(FileName, ForWriting, CreateFlgTrue)
'    TextFile.Write (Buffer)
'
'    TextFile.Close
'    Set FSO = Nothing
'
'    WriteTextFile_ByFSO = True
'    Exit Function
'
'OpenTextFileError:
'
'    TextFile.Close
'    Set FSO = Nothing
'    WriteTextFile_ByFSO = False
'
'End Function

Public Function OpenTextFile_ByADODBStream(FileName As String) As String
    Dim FileBody As String
 
    Dim ADODBStream As Object
    Set ADODBStream = CreateObject("ADODB.Stream")
            
    With ADODBStream
        .Type = 1
        .Mode = 3
        .Open
        .LoadFromFile FileName
        .Position = 0
        .Type = 2
        .Charset = "utf-8"
        FileBody = .ReadText
        .Close
    End With
    
    Set ADODBStream = Nothing
    
    OpenTextFile_ByADODBStream = FileBody
     
End Function

' WriteTextFile_ByADODBStream
Public Function WriteTextFile_ByADODBStream(ByVal OutFileName As String, ByVal Buffer As String) As Boolean

    If FileCreate_ByFSO(OutFileName, True) = True Then
    
        Dim ADODBStream As Object
        Set ADODBStream = CreateObject("ADODB.Stream")
            
        '
        With ADODBStream
            .Type = 2
            .Charset = "utf-8"
            .Open
            .WriteText Buffer, 1
            .SaveToFile OutFileName, 2
            .Close
        End With
        
        Set ADODBStream = Nothing
        WriteTextFile_ByADODBStream = True
    Else
        WriteTextFile_ByADODBStream = False
    End If
    
End Function



'
' log
'
Public Function WriteLog(ByVal LogFilePath As String, ByVal msg As String)
    Dim FSO As Object, LOG As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
   
    '
    If FSO.FileExists(LogFilePath) = False Then
        FSO.CreateTextFile (LogFilePath)
    End If
   
    '
    Set LOG = FSO.OpenTextFile(LogFilePath, 8)
    '
    LOG.WriteLine Now & vbTab & msg
   
    Set LOG = Nothing
    Set FSO = Nothing
End Function

 

你可能感兴趣的:(VBA)