2014-03-12 138 views
0

我必須改變下面的代碼這樣的要求:獲取單元格值

現在:

'in a loop with a being rownumber  
CurrInvoiceNum = ws2.Range("B" & a).Value 

要求:

' Transaction ID is the column name of B and the reason for the change is that it need not always be in B. 
CurrInvoiceNum = ws2.Range("Transaction ID" & a).Value 

我試圖讓像這樣的單元格:

Cells.Find(What:="Transaction ID", LookAt:=xlWhole).Column) 

但不能讓它使用ROWNUMBER的..

感謝,

回答

1

第一種方法 - 使用Application.Match(更快的):

Dim colNum 

With ws2 
    colNum = Application.Match("Transaction ID", .Range("1:1"), 0) 
    If IsError(colNum) Then 
     MsgBox "Column with header 'Transaction ID' not found" 
     Exit Sub 
    End If 

    CurrInvoiceNum = .Cells(a, colNum).Value 
End With 

第二條本辦法 - 使用.Find

Dim rng As Range 

With ws2 
    Set rng = .Range("1:1").Find(What:="Transaction ID", LookAt:=xlWhole) 
    If rng Is Nothing Then 
     MsgBox "Column with header 'Transaction ID' not found" 
     Exit Sub 
    End If 

    CurrInvoiceNum = .Cells(a, rng.Column).Value 
End With 

這兩個apporaches都假設你[R頭在第一行:.Range("1:1")

0

這假設列名是在第一行:

Sub dural() 
    Set r = Rows(1).Find(What:="Transaction Id") 
    a = 7 
    CurrInvoiceNum = r.Offset(a - 1, 0).Value 
End Sub