1
我在代码中遇到了一些IF语句的麻烦,我注意到代码并没有按照它的意思去做,而且这是由于错误的IF语句造成的。Excel VBA如果在遇到不满足条件时执行
下面的代码检查如果两个值匹配,这两个值是targetcolumnvalue和sourcecolumnvalue。如果这两个值匹配,excel将使用这些值作为列和行标识符,根据单元格的行和列位置执行复制/粘贴。
当我调试代码时,targetcolumnvalue等于26,并且sourcecolumn值等于“”,但代码在if语句被满足的场景中执行。我在这里没有看到什么吗?
Option Compare Text
Option Explicit
Sub BuggyIf()
Dim SourceColumnValue As String, sourcerow As String, targetrow As String, targetcolumnvalue As String, sourcecolumnnumber As String
Dim F as long, O As Long, P As Long, TargetValue As Long, actualsourcerow As Long, actualtargetrow As Long, actualtargetcolumn As Long, sourcedateposition As Long, actualsourcecolumn As Long, targetdateposition As Long, actualtargetforecastrow As Long
Dim Copysource As Range, pastetarget As Range
TargetValue = dumpsheet.Cells(rows.Count, 1).End(xlUp).row
sourcedateposition = dumpsheet.Cells(rows.Count, 5).End(xlUp).row
targetdateposition = dumpsheet.Cells(rows.Count, 7).End(xlUp).row
For F = 1 To sourcedateposition
SourceColumnValue = dumpsheet.Cells(F, 5).Value
'Get Target Column Match to Source
For P = 1 To targetdateposition
targetcolumnvalue = dumpsheet.Cells(P, 7).Value
' BUGGY IF STATEMENT
If targetcolumnvalue = SourceColumnValue Then
TargetColumnRange.Value = SourceColumnValue
targetcolumnvalue = dumpsheet.Cells(P, 8).Value
sourcecolumnnumber = dumpsheet.Cells(F, 6).Value
For O = 1 To dumpsheet.Cells(rows.Count, "a").End(xlUp).row
If O > 1 Then
Sourcename = dumpsheet.Cells(O, 1).Value
sourcerow = dumpsheet.Cells(O, 2).Value
targetrow = dumpsheet.Cells(O, 3).Value
dailyrate = dumpsheet.Cells(O, 4).Value
'Set Integers
actualsourcerow = CInt(sourcerow)
actualtargetrow = CInt(targetrow)
actualtargetcolumn = CInt(targetcolumnvalue)
actualsourcecolumn = CInt(sourcecolumnnumber)
actualtargetforecastrow = actualtargetrow - 521
dailyfte = CInt(dailyrate)
'Copy and Paste
Set Copysource = SourceSheet.Cells(actualsourcerow, actualsourcecolumn)
Set pastetarget = TargetSheet.Cells(actualtargetrow, actualtargetcolumn)
If pastetarget.Cells.Interior.Color <> 1 Then
Copysource.Copy
pastetarget.PasteSpecial (xlPasteValues)
Set Copysource = TargetSheet.Cells(actualtargetrow, actualtargetcolumn)
Set pastetarget = TargetSheet.Cells(actualtargetforecastrow, actualtargetcolumn)
Copysource.Copy
pastetarget.PasteSpecial (xlPasteValues)
fte = TargetSheet.Cells(actualtargetforecastrow, actualtargetcolumn).Value/dailyfte
TargetSheet.Cells(actualtargetforecastrow, actualtargetcolumn).Value = fte
End If
End If
Next O
End If
Next P
Next F
....
End Sub
如果不是targetvalue =“”或sourcevalue =“”,请添加验证(条件),然后在里面添加if条件。 – 2015-03-31 00:21:33
我现在正在运行这个程序,有没有解释为什么if语句本身在VBA中不满足条件时会运行? – PootyToot 2015-03-31 00:24:26
原因是sourcecolumn持有空值。空也可以等于0,它又是长数据类型的一部分。要么你的源列不应该有空(可以使用 - 作为替代),或者你需要处理空验证。 – 2015-03-31 00:27:29