【发布时间】:2019-01-23 14:06:39
【问题描述】:
我有一个 Excel 文件,它从第三方自动生成的各种 txt 文件中导入价格。我使用其中一个 txt 文件遇到了障碍,因为它使用空格分隔,而其他文件使用制表符。由于空间分隔,当我拆分数据时,我在每一列中得到不同的值。
这是我目前要打开和阅读的文本文件
usFileName = PathName & "\" & "Prices.txt"
If fs.FileExists(usFileName) Then
Set US = fs.OpenTextFile(usFileName, 1)
theData = US.ReadLine
getDate = Split(theData, Chr(0))
curDate = Trim(Left(getDate(0), 10))
If curDate = ActiveSheet.Range("Sheet_Date") Then
Do While Not US.AtEndOfStream
On Error Resume Next
Ln = US.ReadLine
Cols = Split(Ln, " ")
Price = Trim(Cols(7))
NameTrim = Trim(Replace(Cols(1), "USO-", ""))
CellName = Replace(NameTrim, "-", "_") & "_" & Trim(Cols(2))
If ActiveSheet.Range(CellName) Is Nothing Then
''Do Nothing here
On Error Resume Next
Else
Set TxtRng = ActiveSheet.Range(CellName)
If TxtRng = ActiveSheet.Range(CellName) Then
TxtRng.Value = Price
End If
End If
Loop
Else
MsgBox ("The current sheet date does not match the US file import date.")
End If
US.Close
Else
MsgBox ("The file Prices.txt does not exist.")
End If
这是 txt 文件的样子:
01/11/2019 06:00 PM USO-FOX-USO E10 8.9929 0.0000
01/11/2019 06:00 PM USO-FOX-USO CON8HE10 1.3212 -0.0244
01/11/2019 06:00 PM USO-FOX-USO CON8HE10TT 1.3232 -0.0244
这就是 Cols 变量的样子。
【问题讨论】:
-
您使用
On Error Resume Next的方式是一种非常糟糕的做法。此行隐藏了 所有 错误消息,但错误仍然存在,您只是看不到它们,因为它使您失明。但问题是您无法修复您看不到的错误。如果您不修复它们,您的代码将无法正常工作。完全删除这些On Error Resume Next行并正确修复您遇到的错误。 -
我得到的错误是因为单元格名称不存在或无法正确匹配单元格。我知道这是不好的做法,但目前它忽略的错误并不关心我。
-
然后以这种方式修复它,它仅会忽略您想要的特定错误,而不是像目前那样每个错误。您无法在此状态下正确调试/处理您的代码。确保
On Error Resume Next正好在您期望错误所在的行之前,并在您期望错误重新启用错误报告的行之后使用On Error Goto 0!另见VBA Error Handling – A Complete Guide -
请注意,
On Error Resume Next不仅会隐藏 next 错误消息,因为它看起来像。相反,它会隐藏 所有 消息,直到On Error Goto 0或End Sub -
我删除了,没有错误。