VBA(8)工作本/表及文件操作

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>

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值