2016-07-15 10 views
1

Ich versuche, eine Abfrage an Access zu senden, um einen bestimmten Wert meines Arbeitsblatts auszufüllen. Ich würde dieses Arbeitsblatt erhalten, indem ich den Login-Namen des aktuellen Benutzers erhalte und eine Spalte durchsuche. Diese Spalte wird gemäß einer Spalte im Zugriff aktualisiert. Der Wert, den ich benötigen würde, ist in der Spalte nach RECHTS der Spalte, die ich durchsuche. Ich habe den Code unten als temporären Try-out meine VLookup an der ArbeitDie Eigenschaft VLookup der WorksheetFunction-Klasse konnte nicht abgerufen werden. Fehler 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 

Ich versuche, den Wert zu erhalten, die ich in der Zelle F1 benötigen. Wenn das funktioniert, würde ich den Wert in eine Variable setzen und diese zu meiner Abfrage hinzufügen. Ich werde auch Fehlerbehandlung einfügen, um sicherzustellen, dass der Code funktioniert, aber jetzt will ich nur, dass es auf meinem 1-Wert funktioniert, von dem ich weiß, dass er in der Spalte ist.

+0

Sie können nicht auf eine Spalte außerhalb des Suchbereichs oder vor der Indexspalte verweisen. Sie müssen INDEX/MATCH oder 'Find()' für das verwenden, was Sie hier wollen. –

Antwort

1

versuchen Sie stattdessen:

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 

Welche wieder vereinfacht werden kann:

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

A vlookup ist einfach nicht geeignet für das, was Sie zu tun versuchen.

+0

Vielen Dank! Ich fand einen Guide, der fast dasselbe machte, also konnte ich dem einfach folgen. Deine Antwort funktioniert! – Tomdw94

+0

Kein Problem - der Grund für Ihr anfängliches Problem war, dass Sie versuchen, eine Spalte zu referenzieren, die nicht als Teil Ihres vlookup betrachtet wird - aber anstatt sich die Mühe zu machen, zu erklären, warum Sie INDEX/MATCH statt und das in eine VBA-Version umwandeln. Ich dachte, es wäre einfacher '.Find()' zu verwenden. Ich würde dennoch raten, einen Blick darauf zu werfen, wie INDEX/MATCH für zukünftige Referenz funktioniert. –