2015-03-31 55 views
1

我在代碼中遇到了一些IF語句的麻煩,我注意到代碼並沒有按照它的意思去做,而且這是由於錯誤的IF語句造成的。Excel VBA如果在遇到不滿足條件時執行

下面的代碼檢查如果兩個值匹配,這兩個值是targetcolumnvaluesourcecolumnvalue。如果這兩個值匹配,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 
+1

如果不是targetvalue =「」或sourcevalue =「」,請添加驗證(條件),然後在裏面添加if條件。 – 2015-03-31 00:21:33

+0

我現在正在運行這個程序,有沒有解釋爲什麼if語句本身在VBA中不滿足條件時會運行? – PootyToot 2015-03-31 00:24:26

+0

原因是sourcecolumn持有空值。空也可以等於0,它又是長數據類型的一部分。要麼你的源列不應該有空(可以使用 - 作爲替代),或者你需要處理空驗證。 – 2015-03-31 00:27:29

回答

0

重新啓動我的電腦解決了這個問題,好像VBA沒有正確編譯。

相關問題