VBA每日一练(16),do loop 循环为啥多了1次?--暂时没想明白--头大

 

本来是写循环,查文件数的

  • 但是发现 do loop 会多循环1次?
  • 无论是  do  while loop 还是  do loop  while
  • 或者是   do until loop 还是 do loop until

 

https://zhidao.baidu.com/question/184272433.html

 

Sub jackma101()
x1 = input_files1("C:\Users\Administrator\Desktop\test1", "\*.txt")
End Sub



Function input_files1(PATH1, PATH2)

k = 0
file1 = Dir(PATH1 & PATH2)
Debug.Print file1

Do Until Len(file1) = 0
   file1 = Dir
   k = k + 1
      
   Debug.Print file1
   Debug.Print k
   
Loop
Debug.Print "last " & k

End Function

VBA每日一练(16),do loop 循环为啥多了1次?--暂时没想明白--头大_第1张图片

 

Sub jackma101()
x1 = input_files1("C:\Users\Administrator\Desktop\test1", "\*.txt")
End Sub



Function input_files1(PATH1, PATH2)

k = 0
file1 = Dir(PATH1 & PATH2)
Debug.Print file1

Do Until Len(file1) = 0

   k = k + 1
   file1 = Dir

      
   Debug.Print file1
   Debug.Print k
   
Loop
Debug.Print "last " & k

End Function

VBA每日一练(16),do loop 循环为啥多了1次?--暂时没想明白--头大_第2张图片

 

 

循环没把 debug.print放在正确的 循环位置,每次都看值为空,还可能造成越界

debug.print用来监测的时候,需要注意,放在循环的位置,尤其是在k=K+1这种变化时,和放在哪个for循环之内外!

Sub ponyma_array2()
Dim arr1()  '当数组定义,且默认开始的index为0! preserve时需要有0的index
'dim arr1 当变量定义

'Application.WorksheetFunction.CountA (Range("c:c"))
'Debug.Print Application.WorksheetFunction.CountA("c:c")
'这种counta只会把"a:a"当成1个字符串,不知道是对象1列,只会统计出1

   k = 1
   m = 1
   
   ReDim Preserve arr1(0 To Application.WorksheetFunction.CountA(Range("c:c")))
' 下标越界  ReDim Preserve arr1(0 To Application.WorksheetFunction.CountA(Range("c:c")))
      
'   Debug.Print Application.WorksheetFunction.CountA(Range("c:c"))
'   Debug.Print Range("c65536").End(xlUp).Row

   For i = 1 To Range("c65536").End(xlUp).Row Step 1
       If Cells(i, 3) <> "" Then
     
          Debug.Print Cells(i, 3)
          arr1(k) = Cells(i, 3)
          Debug.Print arr1(k)
          k = k + 1
'          Debug.Print arr1(k),写在这里问题1:k已经变了,下一个k还没赋值为空,2最后的k越界
'          循环是很精巧的,放的地方很讲究,放得不对,就错误百出
         
       End If
   Next i
   
   For j = 1 To UBound(arr1, 1)
       Cells(m, 10) = arr1(j)
       m = m + 1
   Next j

End Sub


 

 

你可能感兴趣的:(VBA)