05_筛选标记5.0版最终版 多选项文件夹批量操作

项目知识点总结

1.Public 可以声明公共变量

2.Inputbox 对话输入框(默认返回值为文本格式)

3.label1: 标签操作 常配合GoTo标签作跳转使用

4.vbCrLf和 chr(13) & chr(10)回车换行操作

5. Select Case xxx
	case 1
	case 2
	...
	case Else
   End Select 

6.Floder 文件夹操作

7.set 变量 = nothing  释放内存变量

8.VBProject.VBComponents 工程窗体组件

9.VBA.Split(Town, ",") '---拆分数组

10.Find 查找 定位/取列和行

11.AutoFilter自动筛选

12.表格格式取消筛选标记

13. Workbooks.Add '新建一个Excel工作簿

代码如下

Public Town As String
Public TArr() As String
Public TownSheet, firstAddress, ACN
Public wsh As Worksheet
Public num

Sub 选项确认()
       
label1:

    num = InputBox("请根据数字选择对应操作功能!" & vbCrLf & _
      "                                 " & vbCrLf & _
     "  1.表格筛选     1.普通  (11.田组 12.刘组) " & vbCrLf & _
    "                                 " & vbCrLf & _
     "  2.文件夹筛选   2.普通  (21.田组 22.刘组) " & vbCrLf & _
      "                                 " & vbCrLf & _
    "   3.表格取消筛选" & vbCrLf & _
    "                                 " & vbCrLf & _
    "   4.文件夹取消筛选" & vbCrLf & _
    "                                 " & vbCrLf & _
     "   0.取消 ")
     
    Select Case num
     Case 0
     Case 1, 11, 12
            Call xlApp '表筛选
     Case 2, 21, 22, 4
            If ThisWorkbook.FullName <> "D:\NewFile.xlsx" Then Call 文件夹提示
            Call Folder '文件夹
     Case 3
            Call Cancel '表取消
     Case Else
          MsgBox ("你输入的数字有误请重新输入!")
          GoTo label1:
      End Select

End Sub
Sub Folder()
    Dim myPath$, myFile$, myPath1$, myPath2$, WB As Workbook, new_book As Workbook, yes_no '这个$ 是相当于定义字符串
      
    '调用函数,获取用户选择的文件夹,并且在最后加上一个反斜杠,用于下面的文件列表获取
    myPath2 = ChooseFolder  '这里的路径是没有加入最后的"\"的
    myPath = myPath2 & "\"
    
    myPath1 = InStrRev(myPath2, "\") '从右向左查找"\",返回其所在的位置,返回值是一个数字,但是最后会变成一个字符串,所以定义的时候也定义了一个字符串
    If myPath1 = 0 Then
        myPath1 = ""    '如果找不到"\",那么就说明用户选择是主硬盘,如:C:\\等,这样就 返回空值
    Else
        myPath1 = Right(myPath2, Len(myPath2) - myPath1) & "_" '如果不是空值,那么就直接可以使用Right提取,使用最开始没有"\"的myPath2这个变量,
    End If
    
    myFile = Dir(myPath & "*.xls*") '依次找寻指定路径中的*.xls,或者xlsx文件
    
    Do While myFile <> "" '当指定路径中有文件时进行循环
           
        If myFile <> ThisWorkbook.Name Then   '如果我们这个宏文件在需要处理的文件夹之中,这个判断就会跳过下面的操作
            
            Set WB = Workbooks.Open(Filename:=myPath & myFile, UpdateLinks:=0) '打开符合要求的文件,并且如果遇到需要更新链接的时候,默认不更新
            
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            
            Select Case num

            Case 2, 21, 22
                Call xlApp
            Case 4
                Call Cancel
            End Select
            
            On Error Resume Next
            WB.Close 0  '保存关闭文件 0代表FALSE,-1代表TRUE
            
        End If
        myFile = Dir '找寻下一个*.xls,或者xlsx文件
    Loop
    Set WB = Nothing    '释放变量内存
    MsgBox ("兄台,已完成")
    
   ' Application.VBE.ActiveVBProject.VBComponents.Remove VBComponent:=sht.Item
    
    'Application.EnableEvents = True
    'Application.VBE.MainWindow.Visible = False
    'Excel.Application.Quit
    End
    Exit Sub
End Sub

Sub xlApp()

    Call Cancel  ' 初始化表格状态
    
    Select Case num
     Case 1, 2
          Town = InputBox("请输入街道名称!")  '街道输入
     Case 11, 21
         Town = ("xxx,xxx,xxx,xxx") '田组
     Case 12, 22
         Town = ("xxx,xxx,xxx,xxx") '刘组
    End Select
       
    ' Town = InputBox("请输入街道名称!")  '街道输入
    'Town = Text1.Text
     
    
    TArr() = VBA.Split(Town, ",") '-----数组
    
    For Each wsh In Sheets     '表格循环
        wsh.Select
        
        With wsh.UsedRange
             Call 标记
             Call 筛选
        End With
        
    Next wsh
    Excel.Worksheets(1).Select
    
    If num = "2" Or num = "21" Or num = "22" Then
        ActiveWorkbook.Close -1
    Else:
        del
        MsgBox ("兄台,已完成!")
    End If
    
    
End Sub
Sub 标记()
        ' wsh.Activate
        Dim a
        
        For Each TownSheet In TArr()
        
            Set a = wsh.UsedRange.Find(What:=TownSheet)

            If Not a Is Nothing Then
            
                firstAddress = a.Address
                
                ACN = Range(firstAddress).Column
                
                wsh.Tab.ColorIndex = 6
                
            Else
                Debug.Print (ActiveWorkbook.Name & ";" & wsh.Name & ";找不到")
            End If
        Next
End Sub

Sub 筛选()
   ' MsgBox (Range(firstAddress).Column)
   If firstAddress <> "" Then
        'Selection.AutoFilter
        wsh.Range(firstAddress).AutoFilter Field:=ACN, Criteria1:=TArr(), Operator:=xlFilterValues '条件数组
        firstAddress = ""
    End If
    'Worksheets(1).Range("$F$2").AutoFilter Field:=6, Criteria1:="学院路街道", Operator:=xlFilterValues '条件数组'
    
End Sub
Sub Cancel() '取消筛选标记
    Dim wsh As Object
    
    For Each wsh In Sheets
        wsh.Tab.ColorIndex = -4142 '取消颜色标记,取消筛选,取消隐藏
        wsh.AutoFilterMode = False
        Cells.EntireRow.Hidden = False
        Cells.EntireColumn.Hidden = False
    Next wsh

End Sub
Public Function ChooseFolder() As String    '定义函数,用于下面的调用
    '定义并新建一个对话框对象
    Dim dlgOpen As FileDialog
    Set dlgOpen = Application.FileDialog(msoFileDialogFolderPicker)
    
    '如果当前没有对话框显示,就让他弹出对话框
    If dlgOpen.Show = -1 Then ChooseFolder = dlgOpen.SelectedItems(1)
    Set dlgOpen = Nothing
End Function

Sub del() '删除模块
    Dim sht As Object
    Set sht = Application.VBE.ActiveVBProject.VBComponents
    sht.Remove VBComponent:=sht.Item("D最新筛选多选项230131v")
End Sub

Sub 文件夹提示()
    Dim n
         
  n = InputBox("是否创建新工作簿以解除占用(输入对应数字)" & vbCrLf & "1.是 " & vbCrLf & "2.否")

    If n = 1 Then
        MsgBox ("正在创建新工作簿D:\NewFile.xlsx!.....")
        
        Workbooks.Add '新建一个Excel工作簿
        
        
        ActiveWorkbook.SaveAs Filename:="D:\NewFile.xlsx" ',Password:=123将工作簿保存,路径为F:\MyVBA,命名为new,打开工作簿密码为123
        
        Call CopyCode
        
        ThisWorkbook.Close -1
    End If
    
    
End Sub

Sub CopyCode() ' 添加复制代码----
  Dim s$
  s = ThisWorkbook.VBProject.VBComponents("D最新筛选多选项230131v").CodeModule.Lines(1, 300)
 ' Debug.Print s
 
 vbext_ct_StdModule = 1
 
 With ActiveWorkbook.VBProject
 
    .VBComponents.Add(vbext_ct_StdModule).Name = "模块1"
 
    .VBComponents("模块1").CodeModule.AddFromString s
 End With
 
End Sub





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pigerr杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值