2016-11-23 70 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迭代開始時需要重置。 –