2016-11-23 123 views
0

我对此感到抱歉。这里去试图澄清:我的计数变量不会增加超过1的值vba

伪代码:

  1. 对于列表中的一个(一)各项目 - >设置列表计数变量为零
  2. 确认各项目两(j)的
  3. 如果列表中的一个项目匹配列表中的两个项目则计数器和存储值
  4. 如果count == 1然后做的东西(名单列表中发现了两个有一次一个项目)
  5. 如果count == 2,然后做其他的东西(列出在列表二中找到的一个项目两次)
  6. 下一个项目

我的问题是,“股票”变量被递增式内,但该变量的值不会从1更改为2。因此,声明“如果count = 2“永远不会发射。我的图片显示了在j For循环的每次迭代中,我已经打破了代码,以监视“ticker”变量的值。在“ticker”应该从1变为2的迭代中,IF语句内部的等式表明它增加了,但本地窗口中显示的变量值不会改变。

enter image description here

代码:

For i = LBound(SAPanArray) To UBound(SAPanArray) 
      anString = Trim(Split(SAPanArray(i), " ")(0)) 
      ticker = 0 
      Set a = FindNextEmpty(Sheets("SAPdata").Range("F4")) 

      If IsInArrayC(anString, SAPanArray) = 0 Then 
       Sheets("SAPdata").Cells((a.Row), (a.Column)).Value = Sheets("SAPdata").Cells((i + 3), 9).Value 
       Sheets("SAPdata").Cells((a.Row), 7).Value = (Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000 
       Sheets("SAPdata").Cells((a.Row), 7).Interior.Color = RGB(255, 192, 0) 
      Else 
       For j = LBound(SAPbulkArray) To UBound(SAPbulkArray) 
       SAPbulkArray = WorksheetFunction.Transpose(Sheets("SAPdata").Range("F4:F" & (Sheets("SAPdata").Range("F" & Cells.Rows.Count).End(xlUp).Row))) 

        If InStr((SAPbulkArray(j)), anString) > 0 Then 
         ticker = (1 + ticker) 
         dupArray(ticker) = Sheets("SAPdata").Cells((j + 3), 7).Value 
        End If 

        If ticker = 1 Then 
         If ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) <> (Sheets("SAPdata").Cells((j + 3), 7).Value) Then 
          Sheets("SAPdata").Cells((a.Row), (a.Column)).Value = Sheets("SAPdata").Cells((i + 3), 9).Value 
          Sheets("SAPdata").Cells((a.Row), 7).Value = (Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000 
          Sheets("SAPdata").Cells((a.Row), 7).Interior.Color = RGB(255, 192, 0) 
         End If 
        ElseIf ticker = 2 Then 
         summer = (dupArray(1)) + ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) 
         If summer <> dupArray(2) Then 
          If Not IsEmpty(Sheets("SAPdata").Cells((j + 3), 11)) Then 
           Sheets("SAPdata").Cells((j + 3), 7).Value = Sheets("SAPdata").Cells((i + 3), 11).Value 
          End If 

          Sheets("SAPdata").Cells((i + 3), 11).Value = Sheets("SAPdata").Cells((j + 3), 7).Value 
          Sheets("SAPdata").Cells((i + 3), 11).Font.Color = vbWhite 
          Sheets("SAPdata").Cells((j + 3), 7).Value = ((Sheets("SAPdata").Cells((i + 3), 10).Value) * 2000) + Sheets("SAPdata").Cells((j + 3), 7).Value 
          Sheets("SAPdata").Cells((j + 3), 7).Interior.Color = RGB(255, 192, 0) 
         End If 
        End If 

       Next 
      End If 
     Next 
+3

如果您在for循环之前声明ticker = 0,会发生什么? – Sami

+4

这是一大堆代码。你应该缩小这个问题的范围,以便提出一个人们想要回答的问题。参见[mcve]和[问]。 –

+4

这是旁观点,但是这条线是不好的形式:'昏暗的计数器,计数器1,计数器,duplicateCount,行情作为长'。 (除*'ticker'之外的所有变量均隐含为Variant类型,只有'ticker'为'Long'数据类型)。您的其他声明陈述遭受同样的命运。 –

回答

1
  For i = LBound(SAPanArray) To UBound(SAPanArray) 

       anString = Trim(Split(SAPanArray(i), " ")(0)) 
       ticker = 0 
       Set a = FindNextEmpty(Sheets("SAPdata").Range("F4")) 

       If IsInArrayC(anString, SAPanArray) = 0 Then 

       Else 
        For j = LBound(SAPbulkArray) To UBound(SAPbulkArray) 
         If InStr((SAPbulkArray(j)), anString) > 0 Then 
          ticker = (1 + ticker) 
         End If 

         If ticker = 1 Then 

         ElseIf ticker = 2 Then 

OK原谅我的黑客/削减一切,但这个帮助我看了你的逻辑顺序。

由于您的推理线路,只有真实的evers需要是1或0。该

ElseIf ticker =2 

应该

Elseif ticker = 0 

OR

Else 
'some more code 

所以,除非股票需要比以往任何时候都1大于yoyu可以节省自己的麻烦。到目前为止,您发布的内容并不需要。

+2

我也这么认为,但是'i循环里面有一个'j循环' 'OP增加'ticker =(1 + ticker)'中的股票。 – 2016-11-23 01:38:45

+0

这是可能的答案,尽管OP需要更详细的说明。 –

+1

好吧,看起来这不是正确的答案,因为股票代码需要引用一个或两个,所以零在i的eahc迭代开始时需要重置。 –