2016-07-15 122 views
1

我想向Access發送查詢以填寫我的工作表的某個值。我會通過獲取當前用戶的登錄名並通過列來查看該工作表。此列根據訪問列進行更新。我需要的值是在我搜索的列的右側列中。我有下面的代碼作爲臨時試穿出來讓我VLOOKUP工作無法獲取WorksheetFunction類的VLookup屬性錯誤1004

Private Sub CommandButton1_Click() 
    Dim user, cUser As String 
    user = (Environ$("Username")) 
    cUser = Application.WorksheetFunction.VLookup(user, Worksheets("Sheet1").Range("C2:C1000"), -2, False) 
    Worksheets("Sheet1").Range("F1").Value = cUser 
    End Sub 

我想獲得我需要到小區F1用的值。如果這個工作,我會把值放入一個變量,並將其添加到我的查詢。我還會插入錯誤處理以確保代碼繼續工作,但現在我只想讓它工作在我知道的1值上。

+0

您不能在查找區域之外或索引列之前引用列。你需要使用INDEX/MATCH或Find()來獲得你想要的東西。 –

回答

1

試試這個:

Private Sub CommandButton1_Click() 
    Dim user As String, cUser As String '// Note you have to declare the type each time! 
    user = Environ$("USERNAME") 
    cUser = Sheets("Sheet1").Range("C:C").Find(user).Offset(, -2).Value 
    Sheets("Sheet1").Range("F1").Value = cUser 
End Sub 

哪些可以再次簡化爲:

Private Sub CommandButton1_Click() 
    Sheets("Sheet1").Range("F1").Value = Sheets("Sheet1").Range("C:C").Find(Environ$("USERNAME")).Offset(, -2).Value 
End Sub 

與VLOOKUP根本不適合你想要做什麼。

+0

非常感謝!我找到了一個指導,做了幾乎相同的事情,所以我儘管我可以遵循這一點。你的答案有效! – Tomdw94

+0

沒問題 - 你最初的問題的原因是因爲你正在嘗試提供一個沒有被視爲你的vlookup一部分的列 - 而不是經歷解釋你爲什麼需要使用INDEX /相反,並將其轉換爲VBA版本,我認爲使用'.Find()'會更容易。我仍然建議查看INDEX/MATCH的工作方式,以備將來參考。 –

相關問題