2015-03-31 629 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没有正确编译。