2014-01-09 134 views
0

我已經在Excel中創建了一個表單,該表單從用戶接收輸入並將其保存在Sheet2中。我有一個名爲Account的組合框,用戶將從中選擇帳戶的名稱。但是,每個帳戶都有一個與其關聯的唯一ID。我不想將此ID公開給最終用戶,但同時我希望與在sheet2中選擇的帳戶相對應的Id相對應。在Excel中查找宏宏

我想要做一個Vlookup來搜索所選帳戶的Id。

我已經在Sheet3中設置了賬戶值。

 
Example: 
Column A ColumnB 
Account1 Id12345 
Account2 Id23456 
Account3 Id34567 

我在excel宏中的代碼如下所示。

Private Sub Save_Click() 

Dim RowCount As Long 
Dim myValue as String 

RowCount = Worksheets("Sheet2").Range("A1").CurrentRegion.Rows.Count 
With Worksheets("Sheet2").Range("A1") 
.Offset(RowCount, 0).Value = Me.Account.Value 
myValue = WorksheetFunction.VLookup(Range("A2"), Range("Sheet3!G1:G14"), 2, False) 

我不知道爲什麼它不起作用。任何建議將不勝感激。

感謝,

+0

變化'範圍( 「工作表Sheet 3 G1:G14」) '到'Sheet3.Range(「G1:G14」)',或'Worksheets(「Sheet3」)。Range(「G1:G14」)'或者沿着這些線。 –

+0

我改變它爲Sheet3.Range(「G1:G14」)它現在拋出一個錯誤,說明運行時錯誤:424;所需對象。 – user3175856

+4

這是因爲當您要返回第二列時,您在此僅指一列。 'G1:G14'只是一列,但你第三個參數設置爲'2'。這肯定會拋出一個錯誤。將範圍更改爲'G1:H14'或將第三個參數更改爲'1'。 – Manhattan

回答

0

試試這個:

Private Sub Save_Click() 

    Dim RowCount As Long 
    Dim myValue As Variant 
    Dim Sh2 As Worksheet, Sh2 As Worksheet 
    Dim RefRange As Range 

    With ThisWorkbook 
     Set Sh2 = .Sheets("Sheet2") 
     Set Sh3 = .Sheets("Sheet3") 
    End With 

    RowCount = Sh2.Range("A1").CurrentRegion.Rows.Count 
    Set RefRange = Sh3.Range("G1:H14") '--Change as necessary. 

    Sh2.Range("A1").Offset(RowCount, 0).Value = Me.Account.Value 
    On Error GoTo myValueErrHandle 
    myValue = WorksheetFunction.VLookup(Sh2.Range("A2").Value, RefRange, 2, False) 
    '--More code, etc etc. 

myValueErrHandle: 
    If Err.Number = 1004 Then 
     MsgBox "No match using VLOOKUP." 
    End If 
    Exit Sub 

End Sub 

儘可能,符合一切可以並用簡潔而有意義的代碼。如果你想要裏面的東西,不要使用Range("A2")。使用.Value,因爲這是最佳做法。據我所知,沒有錯。我還添加了一個Error 1004處理沒有匹配。最後,請注意,我將myValue更改爲Variant,只是爲了覆蓋基地。

讓我們知道這是否有效。

+0

謝謝BK201,我試過你的代碼。它現在拋出一個彈出窗口爲「使用VLookup不匹配」。這表明由於某種原因,它無法找到所選帳戶的相應ID。 – user3175856

+0

@ user3175856:但是應該有一場比賽嗎?因爲如果沒有,那麼我認爲我們已經有了正確的代碼,對吧? :) – Manhattan

0

試試這個嗎? :對不起太久發表評論:

With Worksheets("Sheet2") 
    .Range("A1").Offset(RowCount, 0).Value = Me.Account.Value 
    myValue = WorksheetFunction.VLookup(.Range("A2"), Sheeet3.Range("G1:H14"), 2, False)" 
End With 

只是也許,所以試試看。

0
Sub Lookup() 
Dim Emp As String 
Dim Lookup_Range As Range 
Dim Age As Single 
Emp = "Jitu" 
Set Lookup_Range = Range("A1:B8") 
Age = Application.WorksheetFunction.VLookup(Emp, Lookup_Range, 2, False) 

MsgBox "Age is : $ " & Age 
End Sub 

表: 的Emp年齡 bibhash 22 拉胡爾22 abhisek 23 激凸21 sujit 24 tinku 25 魯德拉26