VBA 操作文件相关的技巧总结

'适用于知识点六的API代码

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

'知识点一:Path,返回当前工作簿路径

'测试代码如下:

Sub getpath()

'定义mypath为字符串

Dim mypath As String

'把当前文件路径赋予给mypath,注意thisworkbook.path的使用

mypath = ThisWorkbook.Path

'显示路径

MsgBox mypath

End Sub

'知识点二:利用当前路径选择性打开当前文件夹中某xlsx文件

Sub myfile()

'定义mypath为字符串

Dim mypath As String

' 指定路径

mypath = ThisWorkbook.Path

'打开指定路径的A工作簿

Workbooks.Open mypath & "\A.xlsx"

End Sub

'知识点三:返回当前文件夹的除了“文件操作”外其他所有xlsx文件名

Sub GetAllFileName()

'定义MyDir为字符串

Dim MyDir As String

'返回当前工作簿路径的Excel文件名称

MyDir = Dir(ThisWorkbook.Path & "\*.xlsx")

'把MyFile赋予A1

[A1] = "MyFile"

'******************************************

Do

'需要列出的文件名不包含当前的“文件操作”的Excel文件,使用Not...Like 来判断

If Not MyDir Like "*文件操作*" Then

'如果不存在,则逐个填入当前文件夹中的Excel文件名称

Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) = MyDir

'退出If判断

End If

'返回匹配路径的第一个文件名称

MyDir = Dir

'避免错误发生,设置循环终止条件为Len(MyDir)=0,即判断文件名是否为空

Loop Until Len(MyDir) = 0

'******************************************

End Sub

'知识点四:批量删除文件夹内所有类型文件

Sub 批量删除文件()

'定义变量

Dim fso, fld, fd, F

'调用Scripting.FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")

'返回一个和指定路径中文件夹相对应的FSO文件夹对象

Set fld = fso.getfolder(ThisWorkbook.Path & "\")

'循环每个文件夹并删除

For Each fd In fld.subfolders

fd.Delete

Next

'除了本工作簿文件外,循环其他每个文件并删除

For Each F In fld.Files

If F.Name <> ThisWorkbook.Name Then F.Delete

Next

End Sub

'知识点五:判断指定文件是否存在

Sub FileExist1()

'如果当前路径下的B文件的文件名不为空,则存在,否则不存在

If Dir(ThisWorkbook.Path & "\B.xlsx") <> "" Then

MsgBox "B文件存在!"

Else

MsgBox "B文件不存在!"

End If

End Sub

'知识点六:判断指定文件是否存在(API函数)

'*************API代码判断存在*******************************************************************

'Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Sub FileExist2()

'调用了PathFileExists这个API函数判断

If CBool(PathFileExists(ThisWorkbook.Path & "\B.xlsx")) Then

MsgBox "B文件存在!"

Else

MsgBox "B文件不存在!"

End If

End Sub

'PathFileExists 既可以判断本地文件是否存在,又可以判断远程电脑上的文件是否存在。函数返回值是个Long型变量,返回两个值0,1。1表示文件存在(True),0表示文件不存在(False)

'*************API代码判断存在*******************************************************************

'知识点七:判断指定文件是否存在(Scripting.FileSystemObject法)

Sub FileExist3()

'定义变量fs

Dim fs

'调用Scripting.FileSystemObject

Set fs = CreateObject("Scripting.FileSystemObject")

'利用FileExists功能判断

If fs.FileExists(ThisWorkbook.Path & "\B.xlsx") = True Then

MsgBox "B文件存在!"

Else

MsgBox "B文件不存在!"

End If

End Sub

'知识点八:列出指定路径所有子文件夹名称

Sub GetAllFolderlist()

'定义变量fs、fld、fd

Dim fs, fld, fd

'定义i为长整型

Dim i As Long

'初始化i变量

i = 0

'调用Scripting.FileSystemObject

Set fs = CreateObject("Scripting.filesystemobject")

'返回一个和指定路径中文件夹相对应的FSO文件夹对象

Set fld = fs.getfolder(ThisWorkbook.Path & "\")

'循环每个文件夹

For Each fd In fld.subfolders

'把文件夹名称赋予B列

Cells(i + 1, 2) = fd.Name

'使用累加器

i = i + 1

Next

End Sub

'知识点九:获取文件夹大小

Sub GetF()

'定义变量fs、fld、fd

Dim fs, fld, fd

'定义i为长整型

Dim i As Long

'初始化i变量

i = 0

'调用Scripting.FileSystemObject

Set fs = CreateObject("Scripting.filesystemobject")

'返回一个和指定路径中文件夹相对应的FSO文件夹对象

Set fld = fs.getfolder(ThisWorkbook.Path & "\")

'循环每个文件夹

For Each fd In fld.subfolders

'把文件夹名称赋予B列

Cells(i + 1, 2) = fd.Name

'关键是fd.size/1024的运算

Cells(i + 1, 3) = FormatNumber(fd.Size / 1024, 0) & "KB"

'使用累加器

i = i + 1

Next

End Sub

'知识点十:复制文件夹

Sub Copyfile()

'定义变量fso,fs

Dim fso, fs

'调用Scripting.FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")

'取得需要复制的文件夹对象

Set fs = fso.getfolder(ThisWorkbook.Path & "\SQL高级")

'使用copy方法复制到SQL初级文件夹中

fs.Copy (ThisWorkbook.Path & "\SQL初级\")

'显示成功复制

MsgBox "OK!"

End Sub

你可能感兴趣的:(VBA 操作文件相关的技巧总结)