【发布时间】:2017-03-14 15:51:13
【问题描述】:
所以我有这个程序;从远程系统扫描值。有时,如果网络出现故障,它可能会超时,并且会出现 #nan 错误或类似的东西。
当我尝试将该错误消息写入数据库时;因为它正在寻找一个数值,所以它会因为“数据类型不匹配”而出错。
为了解决这个问题,我决定尝试清理结果。所以我有下面的代码。它大部分时间都有效;我看到它失败的是,如果中途有一个数字,然后它又会出错。一旦它到达数字,它似乎会停止循环并且不会清理其他任何东西。
有人能给我的任何帮助都会很棒;也许我这样做很糟糕。我试图举例说明我想在下面看到的内容。如果您有任何建议或问题,请告诉我。
Private Sub Clean()
'Select Current Row For where to start cleaning. LoopIndex is a global variable.
'Just giving the line of where to read from so I do not need to read the whole sheet.
Range("B" & LoopIndex).Select
'Start the loop, to go through the entire row.
Do Until IsEmpty(ActiveCell)
'Checks if it is a number value; if it is not it will clear out the data.
If IsNumeric(ActiveCell.Value) = False Then
ActiveCell.Value = ""
End If
ActiveCell.Offset(0, 1).Select
Loop
End Sub
它看起来像什么。
|A |B |C |D |
|#error|#Error|3 |#Error|
我希望它看起来像什么。
|A |B |C |D |
| | |3 | |
它在做什么。
|A |B |C |D |
| | |3 |#Error|
【问题讨论】:
-
你从哪里得到
LoopIndex?另外,最好avoid using.Select/.Activate。 -
这是我分配给它的一个全局变量。我在评论部分有这个。
-
@user2644176 我会小心使用 do until 循环。 IMO 指定要清洁的范围并简单地循环通过单元格来清洁它们要安全得多。你的范围是可变的吗?我的回答对你不起作用有什么原因吗?让我知道,我会帮助你让它工作。至于为什么你的不是,我会尝试除
IsEmpty之外的其他东西 - 可能想改用ActiveCell = ""。此外,它似乎在我的机器上运行良好(尽管只有一行)。