PixPath是jpg文件夹的完整路径,我正在使用以下代码来处理每个jpg。
fileName = Dir(PixPath)
Do Until fileName = ""
If Right$(fileName, 4) = ".jpg" Then
fileName = Dir()
<process this jpg>
End If
Loop
除了以字母数字顺序返回文件,而不是文件夹中列出的文件显示顺序外,此方法正常。有没有办法解决这个问题?
答案 0 :(得分:4)
您无法使用Dir
执行此操作。
另一种选择是:
FileSystemObject
访问目录中的所有文件.jpg
个文件读入数组 X Val
比较.jpg
s值以按数字升序排序最终数组 X 包含已排序的文件
Sub Test()
Dim objFSO As Object
Dim objFolder As Object
Dim objFiles As Object
Dim objFile As Object
Dim X
Dim lngFileCnt As Long
Dim lngCnt As Long
Dim i As Long
Dim j As Long
Dim strBuffer1 As String
Dim strFolder As String
Set objFSO = CreateObject("Scripting.fileSystemObject")
strFolder = "C:\temp"
Set objFolder = objFSO.getFolder(strFolder)
Set objFiles = objFolder.Files
lngFileCnt = objFiles.Count
ReDim X(1 To lngFileCnt)
'grab all jpg files
For Each objFile In objFiles
If Right$(objFile.Name, 3) = "jpg" Then
lngCnt = lngCnt + 1
X(lngCnt) = objFile.Name
End If
Next
'resize array to number of jpg files
ReDim Preserve X(1 To lngCnt)
'sort array by numeric value
For i = 1 To lngCnt
For j = (i + 1) To lngCnt
If Val(X(i)) > Val(X(j)) Then
strBuffer1 = X(j)
X(j) = X(i)
X(i) = strBuffer1
End If
Next
Next
MsgBox Join(X, ";")
End Sub
有关使用FileSystemObject
。
答案 1 :(得分:2)
来自brettdj(感谢brettdj)的答案效果很好,可能是我将使用的方法,但我发现了其他一些也有效的方法,并且可能在其他情况下提供优势。首先,它保留了使用Dir循环遍历文件夹的极其简单。
在Excel 11中,我使用Dir(如问题中所述)从每个文件夹(一次一个文件夹)创建jpg文件列表,在Col A中排序字母数字。然后我使用自定义列表使用(假)数字排序对Col A进行排序,以便我可以按顺序处理我的jpg。然后清除Col A,并重复下一个文件夹。
生成自定义列表:
在工作栏的第1行输入
=ROW() & ".jpg"
并填写任何适合。在我的情况下,我在自定义列表中使用了1000个项目,因为这是我在任何文件夹中所期望的最大jpg数量。
自定义列表仅采用文本(或根据MS帮助“简单文本”),因此在导入为自定义列表之前,必须使用粘贴&gt;特殊&gt;值将新生成的公式列表转换为文本。列表中的每个项目都是预期的文件名之一。最终的自定义列表如下所示:
1.jpg
2.jpg
3.jpg
…
…
1000.jpg
导入新的自定义列表(工具&gt;选项&gt;自定义列表&gt;导入)后,它将成为数据&gt;排序&gt;选项&gt;首键排序顺序的下拉菜单中的可用选项。
如果您使用VBA进行此类操作,那么这是记录器提供的内容:
Range("A:A").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=6, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
前5个自定义列表内置于Excel中,因此OrderCustom:= 6是新的自定义列表。在进行正常排序时,请记住将其更改回OrderCustom:= False。自定义列表保持与创建的Wkb相关联,直到删除。