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