他山之石——用户自定义类型

继续学习VBA!

Public Declare PtrSafe Function SHFileOperation Lib "shell32.dll" _
(lpFileOp As SHFILEOPSTRUCT) As Long
Public Const FO_DELETE = &H3 '删除文件
Public Const FOF_SILENT = &H4 '不显示进度对话框
Public Const FOF_NOCONFIRMATION = &H10 '不对用户提示
Public Const FOF_ALLOWUNDO = &H40  '不对用户提示
Private Type SHFILEOPSTRUCT
    hwnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type

'1 什么是用户自定义类型
   '用于定义包含一个或多个元素的用户自定义的数据类型
   
'2 自定义类型的结构

'     Type 自定类型名称的名称
'       变量1 As 数据类型1
'       变量2 As 数据类型2
'       变量3 As 数据类型3
'       ....
'     End Type
'例:定义一个短形的数据类型
  Type 矩形
   长 As Integer
   宽 As Integer
   面积 As Long
   名称 As String
  End Type
'3 自定义数据类型的使用
   '自定义数据类型定义后,就可以直接在声明变量时声明该类型,并且在输入该"变量."后可以列出所有自定义类型中的变量名称
   
    Sub dd()
      Dim j As 矩形 '声明变量类型为“短形类型"
      Dim j2 As 矩形
      j.长 = 3 '给变量赋值
      j.宽 = 2
      j.名称 = "矩形1'"
      j.面积 = j.长 * j.宽  '利用变量值进行计算
      Debug.Print j.面积  '显示计算的结果
      j2 = j '自定义变量类型可以打包传递,本句把j1的所有变量的值传递给相同类型的j2
      MsgBox j2.面积 '显示j2的面积
    End Sub
 
'4 API函数中使用的自定义数据类型
   '有的API函数要求提供自定义数据类型,如下例
'例:删除指定文件到回收站


 
Sub 删除文件到回收站(ByVal Myfile As String)
 Dim f As SHFILEOPSTRUCT, r As Long
 With f
  .wFunc = FO_DELETE
  .pFrom = Myfile
  .pTo = vbNullChar
  .fFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_ALLOWUNDO
 End With
 r = SHFileOperation(f)
 If r <> 0 Then
  MsgBox "删除文件错误"
 End If
End Sub

Sub 删除测试()
  删除文件到回收站 ThisWorkbook.Path & "/test.txt"
End Sub
'wFunc 可以为:
'  /FO_MOVE 0x0001 移动文件
'  FO_COPY 0x0002 复制文件
'  FO_DELETE 0x0003 删除文件,只使用 pFrom
'  FO_RENAME 0x0004 文件重命名
'fFlags可以为:
'  FOF_MULTIDESTFILES 0x0001 //pTo 指定了多个目标文件,而不是单个目录
'  FOF_CONFIRMMOUSE 0x0002
'  FOF_SILENT 0x0004 // 不显示一个进度对话框
'  FOF_RENAMEONCOLLISION 0x0008 // 碰到有抵触的名字时,自动分配前缀
'  FOF_NOCONFIRMATION 0x0010 // 不对用户显示提示
'  FOF_WANTMAPPINGHANDLE 0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放
'  FOF_ALLOWUNDO 0x0040 // 允许撤销
'  FOF_FILESONLY 0x0080 // 使用 *.* 时, 只对文件操作
'  FOF_SIMPLEPROGRESS 0x0100 // 简单进度条,意味者不显示文件名。
'  FOF_NOCONFIRMMKDIR 0x0200 // 建新目录时不需要用户确定
'  FOF_NOERRORUI 0x0400 // 不显示出错用户界面
'  FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性
'  FOF_NORECURSION 0x1000 // 不递归目录

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值