如果将数据手动输入电子表格,我的代码运行没有问题。手动输入显然不是最有效的,我接收数据的数据库系统将其输出到dbf文件中。
当我将dbf转换为excel并将数据粘贴到工作表中时我需要运行宏我得到一个类型不匹配错误(在**之间)
Sub TimeDifference()
ActiveWorkbook.Sheets("Avg Downtime").Select
Range("G3:H500").Select
Selection.ClearContents
i = 3
j = i + 1
For i = 3 To 500
If Cells(i, "A").Value = Cells(j, "A").Value Then 'checks if TagID are the same
If Cells(i, "C").Value > 0 And Cells(j, "D").Value > 0 Then 'checks if there has been a complete alarm on/off process
*Cells(j, "G").Value = Cells(j, "B").Value - Cells(i, "B").Value* 'calculates downtime
End If
End If
j = j + 1
Next i
这只是一个简单的减法,当我手动完成它时没有问题。我不知道我能做些什么来修复它。
答案 0 :(得分:0)
在B中,很可能是一个空值或非数值,你正试图用它进行数学计算。
尝试这样的事情。
Sub TimeDifference()
Dim ws As Excel.Worksheet
Dim iRow As Integer
Set ws = ActiveWorkbook.Sheets("Avg Downtime")
ws.Activate
iRow = 3
ws.Range("A" & lRow).Activate
Do While iRow <= 500
If ws.Range("A" & iRow).Value = ws.Range("A" & iRow + 1).Value Then
If ws.Range("C" & iRow).Value > 0 And ws.Range("D" & iRow + 1).Value > 0 Then
if isnumeric(ws.Range("B" & iRow + 1).Value) = true and isnumeric(ws.Range("B" & iRow).Value) = true then
ws.Range("G" & iRow + 1).Value = ws.Range("B" & iRow + 1).Value - ws.Range("B" & iRow).Value
end if
End If
End If
iRow = iRow + 1
Loop
End sub