我有一个VBA代码,可以根据部分名称在目录中搜索文件夹
部分名称在F列中,代码返回文件夹名称和文件夹路径。
例如,文件夹路径是";C: \Users\Dunelle\Desktop\10001-Rev1
路径的最后一部分(Rev1(发生了更改,但10001保持不变。我需要使用通配符10001*
执行搜索。
部分名称在F列,当我在F列中输入值时,我想返回搜索,文件夹名称在同一行的A列中,并返回同一行B列中的文件夹路径。
当引用单个单元格时,我编写的代码就可以工作
但是,当我将范围更改为("F:F"(时,我会得到一个错误13类型不匹配错误。
这是我的代码:
Sub SearchName()
Dim ENumber As Range
Dim ECell As Range
Dim I As Integer
Dim rownumber As Integer
Dim varDirectory As Variant
Dim strDirectory As String
Set ENumber = Range ("F:F")
rownumber = ENumber.Row
strdirectory = "C:UsersDunelleDesktop" & ENumber & "*"
varDirectory = Dir (strDirectory, vbDirectory)
For Each ECell In ENumber.Cells
If ENumber <> "" Then
Cells(rownumber, 1) = varDirectory
Cells(rownumber, 2) = strDirectory + varDirectory
Exit Function
End If
Next ECell
End Sub
请帮忙
感谢
尝试将范围更改为定义的范围,如下所示:
Set ENumber = Range("F1:F10")
或者如果是可变长度范围:
Set ENumber = Range("F1:F" & Range("F1").End(xlDown).Row)
不能将整个范围命名为一个字符串strDirectory
。一次只能从该范围中选择一个单元格。您只需要将3行移动到For
循环中。
试试这个:
Sub SearchName()
Dim ENumber As Range
Dim ECell As Range
Dim I As Integer
Dim rownumber As Integer
Dim varDirectory As Variant
Dim strDirectory As String
Set ENumber = Range ("F:F")
'Move the next 3 lines into the loop and change `Enumber` to `Ecell`
'rownumber = ENumber.Row
'strdirectory = "C:UsersDunelleDesktop" & ENumber & "*"
'varDirectory = Dir (strDirectory, vbDirectory)
For Each ECell In ENumber.Cells
strDirectory = "C:UsersDunelleDesktop" & ECell & "*"
varDirectory = Dir(strDirectory, vbDirectory)
rownumber = ECell.Row
If ENumber <> "" Then
Cells(rownumber, 1) = varDirectory
Cells(rownumber, 2) = strDirectory + varDirectory
Exit Function
End If
Next ECell
End Sub
旁注:For
循环中有Exit Function
。应该是Exit Sub
。