【问题标题】:Loop through files in a folder and countif遍历文件夹中的文件并计数
【发布时间】:2017-07-18 05:36:57
【问题描述】:

我有这个 VBA 代码来计算保存在文件夹中的所有 excel 文件中所有不为零的值,并在包含宏的工作簿中打印出结果。我遇到的问题是它一遍又一遍地打开同一个文件(第一个文件)而不是移动到下一个文件。

Sub RealCount()

   Dim file As String
   Dim row As Integer
   Dim wb As Workbook

   row = 2    
   file = Dir("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
   Do While file <> ""
      Set wb = Workbooks.Open("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
      Call ZeroCount
      file = Dir("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
   Loop
End Sub

【问题讨论】:

  • 向我们展示您已经尝试过的内容,您遇到的问题等。这不是代码编写服务
  • Stack Overflow 不是我网站的代码。请发布您尝试过但不起作用的代码。
  • 第二次调用 dir 只能是Dir()(无参数)
  • @Shadow:试过了还是不行。

标签: excel vba loops countif


【解决方案1】:

以下是一些让它工作的建议:

  • 使用path 变量来保留文件夹位置并使代码更易于阅读
  • 修复Workbooks.Open,因此参数应该是实际的文件路径(我有点惊讶Excel的Workbook.Open实际上可以与*?等通配符一起使用)
  • 检查ZeroCount 没有调用任何Dir 函数。如果你这样做了,那么 Excel 很可能会重置你调用 Dir 以正确获取循环中的下一个文件的能力。如果您发现这种情况正在发生并且您必须在此循环内绝对调用Dir,那么您可以先循环所有Dir 值并将它们存储到一个数组中。然后创建另一个循环,遍历调用 ZeroCount(或任何需要在其中使用 Dir 的代码)的数组

这里是前两点的一个例子:

Sub RealCount()
   Dim path as String
   Dim file As String
   Dim row As Integer
   Dim wb As Workbook

   path = "\\Daglig rapport\KPI Marknadskommunikation\FEB\"
   row = 2    
   file = Dir(path & "*.xl??")
   Do While file <> ""
      Set wb = Workbooks.Open(path & file)
      Call ZeroCount
      row = row + 1     ' I assume you want to increment row each time as well maybe?
      file = Dir()
   Loop
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多