我这里是关键词是 "测试",逻辑是:现实情况中,不方便/不允许使用On Error的情况下,我们可换一个思路,可以判断是不是Nothing
业务场景(代码诞生原因):因为文件夹内有一堆表格,在要这一堆表格里面找是否含有别的厂家的名字...我有一百多个表格,一个个打开累死啦,所以就写了这个,替我进行搜索
说明文档:
1、仅对文件进行搜索,不会改动文件,保留文件完整性
2、中间加了分号,格式为:(工作簿;工作表;是否找到)加分号的意义在于方便分列,容易看出哪个表存在关键词
3、没有设定屏幕锁定,如果别人在你面前,屏幕不停闪烁运作,可以显得你很牛逼...
F、如果需更改关键词,直接把 “测试” 改成你需要的即可
5、如果需要其他的搜索条件,如搜索值,搜索公式等等,可以先录制宏,将Find代码替换掉即可~有问题亦可留言,看到会协助处理,谢谢~
6、目前仅适用于单层文件夹,不适合文件夹内嵌套文件夹的文件操作...递归我还不太会...
7、敲重点:请留意,因为个人本身业务场景情况需要,考虑到隐藏,和筛选等格式不规范,可能造成的影响,所以程序会取消筛选和隐藏
1、先说第一种情况:遍历所有工作表,是否存在某一个关键词
Sub VBA小程序_针对本工作簿所有工作表_搜索相关内容()
Dim sht As Worksheet, a
For Each sht In Worksheets
sht.Activate
'取消筛选,取消隐藏
sht.AutoFilterMode = False
Cells.EntireRow.Hidden = False
Cells.EntireColumn.Hidden = False
Set a = Cells.Find(What:="测试")
'Debug.Print(),可以在立即窗口中查看返回内容,如果找不到,可以百度一下:VBA立即窗口怎么看,一看就会了?
If Not a Is Nothing Then
Debug.Print ( & ";" & & ";找到")
Else
Debug.Print ( & ";" & & ";找不到")
End If
Next
End Sub
2、第二种情况,再说遍历所有文件夹内所有文件,循环判断文件夹里 所有文件里面的 所有Sheet(工作表)是否存在某一个关键词(会弹窗提示用户选择文件夹路径,目前仅适用于单层文件夹,对于文件夹内还有文件夹的情况,暂时不适用)
Sub VBA小程序_遍历文件夹内所有文件_搜索相关内容()
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 <> Then '如果我们这个宏文件在需要处理的文件夹之中,这个判断就会跳过下面的操作
Set WB = Workbooks.Open(Filename:=myPath & myFile, UpdateLinks:=0) '打开符合要求的文件,并且如果遇到需要更新链接的时候,默认不更新
Call 搜索确认
WB.Close 0 '不保存关闭文件
End If
myFile = Dir '找寻下一个*.xls,或者xlsx文件
Loop
Set WB = Nothing '释放变量内存
MsgBox ("兄台,已完成")
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
Function 搜索确认()
Dim sht As Worksheet
For Each sht In Worksheets
sht.Activate
'取消筛选,取消隐藏
sht.AutoFilterMode = False
Cells.EntireRow.Hidden = False
Cells.EntireColumn.Hidden = False
Set a = Cells.Find(What:="测试")
If Not a Is Nothing Then
Debug.Print ( & ";" & & ";找到")
Else
Debug.Print ( & ";" & & ";找不到")
End If
Next
End Function