2013-01-11 172 views
0

enter image description here版本檢查VBA(excel)代碼(redhat)

在這裏,我將使用的東西的例子。

在左側是它將使用NAME BASE REVISE來檢查軟件包版本的補丁。

您可以將腳本轉換爲VBA代碼。我會研究一下,並集成到我真正的工作:

if (Patch name = Pack name) then **** searching for same Name on patch column to reference for patch base and revise number  
     if (base(c column) > base(h column)) ***checknumber[cellbycell] 

      display "yes" in J cell 

      or if (base(C column) = base(h column)) then 

        check if revise(D column) > revise(I column) 

         display "yes" in J cell 
    else display No 

所以,如果你能不能給我的示例代碼;如果您有時間,請向我解釋每行代碼的含義。

+1

這會讓你開始http://msdn.microsoft.com/en-us/library/office/ee814737%28v=office.14%29.aspx –

回答

1

你不需要VBA此

=IF($A2=$G2,IF($C2>$H2,"Yes",IF($C2=$H2,IF($D2>$I2,"Yes","No"),"No")),"No") 

那進去J列

+1

當然,我意識到這不會與在那裏破門而入。您需要進行一些自定義編碼(使用VBA或公式)來告訴excel如何確定字符串A如何大於字符串B.如果可以,也許可以在破折號上分隔列。看到列A =列G不是問題,只有列C和H我可以看到是一個問題。 –

+0

是的,因爲它就像x.x.x - x.x.x,有些時候我們必須和2.1.3.1和2.13.1這樣的不等點數進行比較; excel功能是不是能夠做到這一點 (我認爲它實際上可以但後來我必須拆分每個單元格到每個單元比較它。浪費空間) 我不好,我不想在T之前學習VBA^T – eathapeking

1

這樣的事情應該工作:

Option Explicit 

Sub variousconditions() 

Dim i As Integer, x As Integer 
x = 0 
For i = 2 To 10 
    With Excel.ThisWorkbook.ActiveSheet 
     If .Cells(i, 1) = .Cells(i, 7) Then '****searching for same Name on patch 
      Select Case .Cells(i, 3) '***checknumber[cellbycell] 
        Case Is > .Cells(i, 8) 
          .Cells(i, 10) = "yes" 
        Case Is = .Cells(i, 8) 
          If .Cells(i, 4) > .Cells(i, 9) Then 
           .Cells(i, 10) = "yes" 
          End If 
       End Select 
     End If 
    End With 
Next i 

End Sub 

我不得不再次重申亞洲時報Siddharth的引用作爲這將告訴你你需要保存這些代碼的地方等:http://msdn.microsoft.com/en-us/library/office/ee814737%28v=office.14%29.aspx

+0

謝謝,但它仍然不能很好地工作 它只顯示第一個CCC-但不是其他CCC- 它只顯示3的結果是的 – eathapeking

1

這是一個函數,用於比較兩個點號版本號,您需要將它們粘貼到VBA編輯器中的新模塊中。

Option Explicit 

Public Function VersionCompare(CurrentVersion As Range, _ 
           TargetVersion As Range) 

    Dim result As Integer 
    result = CompareDotStrings(CurrentVersion.Cells(1, 1).Value, _ 
           TargetVersion.Cells(1, 1).Value) 

    If result = 1 Then 
     VersionCompare = True 
    Else 
     VersionCompare = False 
    End If 
End Function 

Private Function CompareDotStrings(LeftValue As String, _ 
            RightValue As String) _ 
            As Integer 

    Dim CompareLeft() As String, CompareRight() As String, CompareLength As Integer 

    CompareLeft = Split(LeftValue, ".") 
    CompareRight = Split(RightValue, ".") 
    CompareLength = UBound(CompareLeft) 
    If UBound(CompareRight) < CompareLength Then CompareLength = UBound(CompareRight) 

    Dim ElementLeft As Integer, ElementRight As Integer, Comparison As Integer 
    Dim ElementNumber As Integer 

    For ElementNumber = 0 To CompareLength 
     ElementLeft = CInt(CompareLeft(ElementNumber)) 
     ElementRight = CInt(CompareRight(ElementNumber)) 
     Comparison = ElementRight - ElementLeft 
     If Comparison <> 0 Then 
      CompareDotStrings = Sgn(Comparison) 
      Exit Function 
     End If 
    Next ElementNumber 
    CompareDotStrings = 0 
End Function 

有了這個,你可以使用=VersionCompare(H2, C2)比較兩個版本號和一切你想做的事(如裂開的虛線版本),可以在工作表中公式來完成。

+0

詹姆斯!如果它在3點和2點之間進行比較會怎麼樣。可以嗎?........像3.3.10與3.3.1.2相比較還是需要添加任何代碼行 .........非常感謝您的回答 – eathapeking

+0

不客氣 - 它會比較可供比較的內容。所以在這個例子中,它將比較3.3.10和3.3.1,因爲沒有什麼可以比較2。您可以添加代碼來比較UBounds,以便在出現平局的情況下獲得更多細節。 –