【问题标题】:Read other csv file name when some of the csv files are absent在某些 csv 文件不存在时读取其他 csv 文件名
【发布时间】:2020-09-06 09:07:44
【问题描述】:

我创建了一个宏来读取 csv 文件。但是,当其中一个 csv 文件不存在时,即使其他 csv 文件可用,宏也会停止读取其余的 csv 文件。那么我应该怎么做才能纠正它,以便即使其中一个甚至一些不存在,它也可以继续读取其他 csv 文件?

Private Sub get_file_namevcap() 'check csv file using readdata sub

Dim filename As String
Dim location As String
location = Me.ComboBox2 'csv folder name

Dim ib As Integer
ib = 2
Do While ActiveWorkbook.Sheets("Index_AREA").Cells(ib, 41) <> ""
      filename = location & "\" & ActiveWorkbook.Sheets("Index_AREA").Cells(ib, 41) 'getting csv file name in the csv folder

Call readdatavcap3(filename, ib) 'another private sub to read data


    ib = ib + 1
Loop



End Sub

【问题讨论】:

  • 在开始循环之前确定要检查的最后一行,并继续直到到达它,而不是在第一个空单元格处停止。 stackoverflow.com/questions/38882321/…
  • Do While ib &lt;&gt; ActiveWorkbook.Sheets("Index_AREA").Range("AO" &amp; Rows.Count).End(XlUp).Row +1一样改变你的循环
  • @NareshBhople 在这种情况下,我是否将 do while ib Range 替换为 ib = 2 而其余部分相同?
  • 不,那将是无效的。它会抛出一个错误...让 ib = 2 然后如上所述更改循环。另外,添加了一个答案,请检查它是否有效。
  • @Naresh Bhople 但我仍然需要 Do While ActiveWorkbook.Sheets("Index_AREA").Cells(ib, 41) "" 来检查空的 csv 链接,所以我想我不能替换那个?

标签: excel vba csv


【解决方案1】:

在开始循环之前确定要检查的最后一行,并继续直到到达它,而不是在第一个空单元格处停止。

另外,在行变量中使用 Long 而不是 Integer。在这种情况下,这并不是完全必要的,但如果您的行数超过 32,767 行,则养成一个好习惯。

此外,使用With 块还将使代码更短、更少冗余、更易读、更容易在未来更改。

Private Sub get_file_namevcap() 'check csv file using readdata sub
  Dim lSearchColumn As Long
  Dim lLastRow As Long
  Dim lRow As Long
  Dim filename As String
  Dim location As String

  location = Me.ComboBox2 'csv folder name

  ' convert column letters to a number
  lSearchColumn = Columns("AO").Column

  With ActiveWorkbook.Sheets("Index_AREA")
    lLastRow = .Cells(.Rows.Count, lSearchColumn).End(xlUp).Row
    For lRow = 2 To lLastRow
      ' getting csv file name in the csv folder
      filename = location & "\" & .Cells(lRow, 41) 
      ' skip if it's blank
      If Len(Trim(filename)) > 0 Then
        ' another private sub to read data
        readdatavcap3(filename, lRow) 
      End If
    Next
  End With 

End Sub

【讨论】:

  • 您可能想要检查空文件名 =)
  • @braX 嘿,感谢您的回复,但随后由于某些原因,它不适用于宏的其他部分,这不是您的错
  • 好吧,那将是另一个问题。 :)
  • 就像随后当我调用 readdatavcap3(filename,lRow) 时,我得到了错误的文件名或 ref
  • 我不知道那个函数是什么,就像你写的那样,但你可以在调用另一个函数之前使用Debug.Print filename 来查看它是什么。在该行之后放置一个Stop 并检查它。
【解决方案2】:

尝试用

替换循环
ib = 2
Do While ib <> ActiveWorkbook.Sheets("Index_AREA").Range("AO" & Rows.Count).End(XlUp).Row +1
if ActiveWorkbook.Sheets("Index_AREA").Cells(ib, 41) <> "" then
  filename = location & "\" & ActiveWorkbook.Sheets("Index_AREA").Cells(ib, 41) 'getting csv file name in the csv folder

Call readdatavcap3(filename, ib) 'another private sub to read data

end if
ib = ib + 1
Loop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2020-02-10
    • 2023-03-27
    相关资源
    最近更新 更多