在“ Value =”行上,循环中有一些实例,我将遇到类型不匹配或单元格为空的情况。
有人可以解释一下如果数据集中有错误时,如何使用错误测试跳过这一步并继续执行我的循环吗?
谢谢!
Sub ExpDate()
Dim bRow As Double
Dim tRow As Double
Dim lCol As Double
Dim fCol As Double
Dim ListRow As Double
Dim Value As Date
With ThisWorkbook.Worksheets("Canadian")
bRow = Cells(Rows.Count, 5).End(xlUp).row
tRow = 5
fCol = 7
Do While tRow <= bRow
lCol = Cells(tRow, Columns.Count).End(xlToLeft).Column
Do While fCol <= lCol
Value = Cells(tRow, fCol).Value
ListRow = Cells(Rows.Count, 1).End(xlUp).row + 1
Cells(ListRow, 1).Value = Value
fCol = fCol + 1
Loop
fCol = 7
tRow = tRow + 1
Loop
Range("A5:A1000").RemoveDuplicates Columns:=Array(1, 1), Header:=xlYes
End With
End Sub
答案 0 :(得分:2)
几件事。
您只需要检查单元格是否包含日期即可。
将user.is_staff = True
用于整数变量,而不是Long
。
您的With语句是多余的,因为您需要在范围引用前面使用点-我已经添加了它们。
Double
答案 1 :(得分:0)
想象一下,您的输入看起来像第A
列,并且您想将日期传递到第B
列:
应该考虑两个问题-第3行和第5行中的单元格。可以很容易地检查第5行,只要这是一个错误并且?IsError(Cells(5,1)
将返回{{1} }。但是,如果尝试检查True
,则会出现问题。
一种快速解决问题的方法是使用专用的布尔函数,其中包含?IsError(Cdate("K"))
,如果On Error Resume Next
会话中有任何特定错误,则返回True
:
CDate(value)
或者您可以使用Sub TestMe()
Dim target As Range
Dim myCell As Range
Set target = Worksheets(1).Range("A1:A6")
For Each myCell In target
If IsCellDate(myCell) Then
Dim someDate As Date
someDate = myCell
myCell.Offset(0, 1) = someDate
End If
Next
End Sub
Public Function IsCellDate(myData As Variant) As Boolean
On Error Resume Next '- use this line really with caution!
If IsError(CDate(myData)) Then
IsCellDate = False
Exit Function
End If
IsCellDate = True
End Function
并避免使用this answer中的自定义功能。