使用 Dir() 按顺序循环文件
Looping through files in order with Dir()
我正在尝试将几张图片插入到 excel 电子表格中,然后将其另存为 PDF。我已经能够弄清楚如何 space 图片并遍历文件夹中的所有图片,但我似乎无法弄清楚如何按顺序遍历图片。
我发现我可以使用 Dir 遍历特定文件夹中的 .jpg 文件,如以下问题所示:Loop through files in a folder using VBA? and this question macro - open all files in a folder。它创造了奇迹,但我需要按顺序遍历图片。图片标记为 "PHOTOMICS0",最后的数字在增加。
这是我正在使用的东西。
counter = 1
MyFile = Dir(MyFolder & "\*.jpg")
Do While MyFile <> vbNullString
incr = 43 * counter
Cells(incr, 1).Activate
ws1.Pictures.Insert(MyFolder & "\" & MyFile).Select
MyFile = Dir
counter = counter + 1
Loop
到目前为止,MyFile 已从 "PHOTOMICS0" 变为 "PHOTOMICS4"、9、10、7、2、3、8、6、5,最后是 1。重复时,结果相同命令。我怎样才能按数字顺序递增它们?
感谢 cybernetic.nomad and Siddharth Rout 的建议,我得以解决此问题。
我使用了这些帖子中的一些函数和代码行:
How to find numbers from a string?
这是功能代码:
counter = 0
MyFile = Dir(MyFolder & "\*.jpg")
Do While MyFile <> vbNullString
ReDim Preserve PMArray(counter)
PMArray(counter) = MyFile
MyFile = Dir
counter = counter + 1
Loop
Call BubbleSort(PMArray)
b = counter - 1
For j = 0 To b
a = j + 1
If i > 24 Then a = j + 2
incr = 43 * a
Cells(incr, 1).Activate
ws1.Pictures.Insert(MyFolder & "\" & PMArray(j)).Select
Next j
其中 BubbleSort 和 BubbleSort 中使用的相关函数是:
Sub BubbleSort(arr)
Dim strTemp As String
Dim i As Long
Dim j As Long
Dim lngMin As Long
Dim lngMax As Long
lngMin = LBound(arr)
lngMax = UBound(arr)
For i = lngMin To lngMax - 1
For j = i + 1 To lngMax
If onlyDigits(arr(i)) > onlyDigits(arr(j)) Then
strTemp = arr(i)
arr(i) = arr(j)
arr(j) = strTemp
End If
Next j
Next i
End Sub
Function onlyDigits(s) As Integer
' Variables needed (remember to use "option explicit"). '
Dim retval As String ' This is the return string. '
Dim retvalint As Integer
Dim i As Integer ' Counter for character position. '
' Initialise return string to empty '
retval = ""
' For every character in input string, copy digits to '
' return string. '
For i = 1 To Len(s)
If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
retval = retval + Mid(s, i, 1)
End If
Next
' Then return the return string. '
retvalint = CInt(retval)
onlyDigits = retvalint
End Function
我正在尝试将几张图片插入到 excel 电子表格中,然后将其另存为 PDF。我已经能够弄清楚如何 space 图片并遍历文件夹中的所有图片,但我似乎无法弄清楚如何按顺序遍历图片。
我发现我可以使用 Dir 遍历特定文件夹中的 .jpg 文件,如以下问题所示:Loop through files in a folder using VBA? and this question macro - open all files in a folder。它创造了奇迹,但我需要按顺序遍历图片。图片标记为 "PHOTOMICS0",最后的数字在增加。
这是我正在使用的东西。
counter = 1
MyFile = Dir(MyFolder & "\*.jpg")
Do While MyFile <> vbNullString
incr = 43 * counter
Cells(incr, 1).Activate
ws1.Pictures.Insert(MyFolder & "\" & MyFile).Select
MyFile = Dir
counter = counter + 1
Loop
到目前为止,MyFile 已从 "PHOTOMICS0" 变为 "PHOTOMICS4"、9、10、7、2、3、8、6、5,最后是 1。重复时,结果相同命令。我怎样才能按数字顺序递增它们?
感谢 cybernetic.nomad and Siddharth Rout 的建议,我得以解决此问题。
我使用了这些帖子中的一些函数和代码行:
How to find numbers from a string?
这是功能代码:
counter = 0
MyFile = Dir(MyFolder & "\*.jpg")
Do While MyFile <> vbNullString
ReDim Preserve PMArray(counter)
PMArray(counter) = MyFile
MyFile = Dir
counter = counter + 1
Loop
Call BubbleSort(PMArray)
b = counter - 1
For j = 0 To b
a = j + 1
If i > 24 Then a = j + 2
incr = 43 * a
Cells(incr, 1).Activate
ws1.Pictures.Insert(MyFolder & "\" & PMArray(j)).Select
Next j
其中 BubbleSort 和 BubbleSort 中使用的相关函数是:
Sub BubbleSort(arr)
Dim strTemp As String
Dim i As Long
Dim j As Long
Dim lngMin As Long
Dim lngMax As Long
lngMin = LBound(arr)
lngMax = UBound(arr)
For i = lngMin To lngMax - 1
For j = i + 1 To lngMax
If onlyDigits(arr(i)) > onlyDigits(arr(j)) Then
strTemp = arr(i)
arr(i) = arr(j)
arr(j) = strTemp
End If
Next j
Next i
End Sub
Function onlyDigits(s) As Integer
' Variables needed (remember to use "option explicit"). '
Dim retval As String ' This is the return string. '
Dim retvalint As Integer
Dim i As Integer ' Counter for character position. '
' Initialise return string to empty '
retval = ""
' For every character in input string, copy digits to '
' return string. '
For i = 1 To Len(s)
If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
retval = retval + Mid(s, i, 1)
End If
Next
' Then return the return string. '
retvalint = CInt(retval)
onlyDigits = retvalint
End Function