2014-03-12 139 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