1、excelVBA中基本上是围绕workbook与worksheet的操作;记录一下一些基本操作与注释.
Sub work1() '工作簿及工作表操作
Dim wb1 As Workbook
Set wb1 = Workbooks.Add '新建一个工作簿
wb1.Sheets("sheet1").Range("a1") = "abcd" '修改新建的工作簿单元格A1值
wb1.Sheets(1).Name = "新创建的本修改工作表名"
wb1.SaveAs ("D:\B.xlsx") '新建的工作簿保存位置及修改文件名
'SavecopyAs 另存为
wb1.Close '关闭前不保存会出现提示未保存窗口
Dim wb2 As Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim x%
Set wb2 = Workbooks.Open("D:/B.xlsx") '对象遇到方法,对象返回值需在方法那加()
For x = 1 To wb2.Worksheets.Count
If wb2.Worksheets(x).Name = "不存在的表名" Then
MsgBox "已经存在"
Else
Set ws1 = wb2.Worksheets.Add
ws1.Name = "不存在的表名"
ws1.Range("a1") = 100
ws1.Visible = True '工作表的隐藏:是否可见TURE/FALSE
ws1.Move before:=wb2.Worksheets(1) '工作表移动至最前面
ws1.Move after:=wb2.Worksheets(Worksheets.Count) '工作表移动至最后面
End If
Next
If wb2.Worksheets.Count = 2 Then
wb2.Worksheets(2).Copy before:=Sheets(1) '复制完的工作表移动到表1的后面
Set ws2 = ActiveSheet '激活WS2
ws2.Name = "复制的表"
ws2.Range("a1") = "测试"
Application.DisplayAlerts = False '警告消息忽略
wb2.Worksheets(2).Delete '工作表删除
Application.DisplayAlerts = True '警告消息恢复
Set wb2 = ActiveWorkbook '激活WB2工作本
wb2.SaveAs ThisWorkbook.Path & "/另存的表.xlsx" '另存为此工作本地址
wb2.Sheets(1).Range("a1") = "测试"
wb2.Worksheets(1).Protect "123" '工作表结构加密
wb2.Unprotect (123) '工作本结构解密
wb2.Protect "123" '工作本结构加密
End If
' Sheets(1).Copy '复制不指定位置在复制一个新的工作本:单表另存
' Set wb = ActiveWorkbook '激活一下新复制的表
' wb.SaveAs ThisWorkbook.Path & "/1日.xls" '指定位置单表另存
' wb.Close True '关闭、保存
wb2.Close True
Dim wb3 As Workbook '文件打开与备份
Set wb3 = Application.ThisWorkbook
wb3.Password = 123 '工作本打开加密(密码打开
wb3.Save
wb3.SaveCopyAs "D:/ABC.xls" '另存为地址
End Sub
2、除了workbook与sheet之外如另外遇到要处理的文件可以用VBA语句处理
FILECOPY语法
FileCopy source, destination
FileCopy 语句语法包含以下 命名参数:
Part | 说明 |
源 | 必需。 指定要复制的文件的名称的字符串表达式。 source 可包含目录或文件夹和驱动器。 |
destination | 必需。 指定目标文件名的字符串表达式。 destination 可包括目录或文件夹和驱动器。 |
备注:如果试图对当前打开的文件使用 FileCopy 语句,将发生错误。
KILL语法
Kill 路径名
必需的 pathname 参数 是 一个字符串表达式 ,用于指定要删除的一个或多个文件名。 pathname 可以包括目录或文件夹以及驱动器。
MKDIR语法
MkDir 路径
必需的 path 参数 是 一个字符串表达式 ,用于标识要创建的目录或文件夹。 路径 可能包括驱动器。 如果未指定驱动器,则“MkDir”在当前驱动器上新建目录或文件夹。
REDIR语法
RmDir path
必需的 path 参数 是 一个字符串表达式 ,用于标识要删除的目录或文件夹。 path 可以包含驱动器。 如果没有指定驱动器,RmDir 将删除当前驱动器上的目录或文件夹。
备注:如果您尝试对包含文件的目录或文件夹使用 RmDir ,则会发生错误。 在尝试 删除 目录或文件夹之前,请使用 Kill 语句删除所有文件。
NAME语法
重命名磁盘文件、目录或文件夹。
Name 旧路径名称 As 新路径名称
The Name statement syntax has these parts:
Part | 说明 |
oldpathname | 必需。 指定 现有文件名和位置的字符串表达式;可能包括目录或文件夹以及驱动器。 |
newpathname | 必需。 指定新文件名和位置的字符串表达式;可能包括目录或文件夹以及驱动器。 newpathname 指定的文件名不可已存在。 |
语句注释:来自官方 <语句 | Microsoft Docs>
举例应用
Sub work2()
FileCopy "D:/ABC.xls", "E:/ABCD.xls"
Kill "D:/abc.xls"
MkDir ThisWorkbook.Path & "\text" '新建一个text的文件夹
RmDir ThisWorkbook.Path & "\指定删除文件夹" '只能删除空夹
Name ThisWorkbook.Path & "\text" As ThisWorkbook.Path & "\改后的名"
Name ThisWorkbook.Path & "\要改的名" As ThisWorkbook.Path & "\改后的名" '当已有文件夹时就是移动状态
End Sub
:3.上述都处理不了的情况下还有调用FileSystemObject来处理.
一般是直接创建对象引用:
Sub work3()
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFolder ThisWorkbook.Path & "\被复制的文件夹", ThisWorkbook.Path & "\复制后的文件夹"
'复制文件夹未存在时报错
Set fs = Nothing
End Sub
官方语法说明
Scripting.FileSystemObject
下面的代码展示了如何使用 FileSystemObject 对象来返回可读取或写入的 TextStream 对象:
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", True)
a.WriteLine("This is a test.")
a.Close
在示例代码中:
- CreateObject 函数返回 FileSystemObject (fs)。
- CreateTextFile 方法创建文件作为 TextStream 对象 (a)。
- WriteLine 方法将一行文本写入创建的文本文件。
- Close 方法刷新缓冲区并关闭文件。
方法 | 说明 |
BuildPath | 将名称附加到现有路径。 |
CopyFile | 将一个或多个文件从一个位置复制到另一个位置。 |
CopyFolder | 将一个或多个文件夹从一个位置复制到另一个位置。 |
CreateFolder | 创建新文件夹。 |
CreateTextFile | 创建文本文件并返回可用于从文件读取或写入文件的 TextStream 对象。 |
DeleteFile | 删除一个或多个指定的文件。 |
DeleteFolder | 删除一个或多个指定的文件夹。 |
DriveExists | 检查指定的驱动器是否存在。 |
FileExists | 检查指定的文件是否存在。 |
FolderExists | 检查指定的文件夹是否存在。 |
GetAbsolutePathName | 返回指定路径的驱动器根目录的完整路径。 |
GetBaseName | 返回指定文件或文件夹的基名称。 |
GetDrive | 返回对应于指定路径中的驱动器的 Drive 对象。 |
GetDriveName | 返回指定路径的驱动器名称。 |
GetExtensionName | 返回指定路径中最后一个组件的文件扩展名。 |
GetFile | 返回指定路径的 File 对象。 |
GetFileName | 返回指定路径中最后一个组件的文件名或文件夹名。 |
GetFolder | 返回指定路径的 Folder 对象。 |
GetParentFolderName | 返回指定路径中最后一个组件的父文件夹的名称。 |
GetSpecialFolder | 返回某些 Windows 特殊文件夹的路径。 |
GetTempName | 返回随机生成的临时文件或文件夹。 |
Move | 将指定文件或文件夹从一个位置移动到另一个位置。 |
MoveFile | 将一个或多个文件从一个位置移动到另一个位置。 |
MoveFolder | 将一个或多个文件夹从一个位置移动到另一个位置。 |
OpenAsTextStream | 打开指定文件并返回可用于从该文件读取、写入该文件或追加到该文件的 TextStream 对象。 |
OpenTextFile | 打开文件并返回可用于访问该文件的 TextStream 对象。 |
WriteLine | 将指定字符串和换行符写入 TextStream 文件。 |
属性 | 说明 |
Drives | 返回计算机上所有 Drive 对象的集合。 |
name | 设置或返回指定文件或文件夹的名称。 |
Path | 返回指定文件、文件夹或驱动器的路径。 |
Size | 对于文件,返回指定文件的大小(以字节为单位)。对于文件夹,返回文件夹中包含的所有文件和子文件的大小(以字节为单位)。 |
Type | 返回有关文件或文件夹的类型的信息(例如,对于以 .TXT 结尾的文件,返回“文本文档”)。 |
来自官方注释 <FileSystemObject 对象 | Microsoft Docs>