2017-11-11 4 views
1

私はこれをあまりにもうまく説明したのか分かりません。私は初心者で、VBAでVLOOKUPを使ってファイルから価値を得ようとしています。しかし、私は明らかに文字列自体を扱うことができますが、変数として使用することはできません。VBA内のVLOOKUPで変数を範囲として使用するにはどうすればよいですか?

ドロップダウンリストで何かを選択すると、自動的に2つのテキストボックスが表示されます。ドロップダウン自体によって、データを持つワークシートが決定されます。

Private Sub cbProductList1_Change() 
    vCode1 = Application.WorksheetFunction.VLookup(cbProductList1.Value, 
    [Products!A:B], 2, False) 
    Me.tbProdCode1 = vCode1 
    vPrice1 = Evaluate("VLOOKUP(" & vCode1 & ", " & Me.labelCFValue & ", 2, False)") 
    Me.tbPrice1 = vPrice1 
End Sub 

私はvCode1上のMsgBoxを実行した場合 - それは私にVLOOKUPのための最初の引数にする必要がある文字列を与えます。 Me.labelCFValueでMsgBoxを実行した場合、私はそれが私に必要なようにCF_1!A25:B33(引用符なし)を与えます。しかし、vPrice1でMsgBoxを実行すると、エラーが発生します。

後でをApplication.WorksheetFunction.VLookup()の中に使用するのを手伝ってもらえば、それも良いかもしれません。

助けてください?

+1

ユーザ定義関数を作成した場合、labelCFvalueの値を返すことができます(例えば、 'getlabelCF =)。文字列getlabelCF = Me.labelCFValue End Function')。 – serakfalcon

+0

ありがとうございます!それはそれを修正! – NsD

答えて

1

私はコードをテストすることができませんでしたが、これがうまくいくか、あなたの道を見つけるのに役立つはずだと思います。

Option Explicit 

Private Sub cbProductList1_Change() 

    Dim Rl As Long        ' last row 
    Dim LookupRange As Range 
    Dim Sp() As String       ' splitting labelCFValue 
    Dim vCode1 As String 
    Dim vPrice1 As Double 

    ' ActiveSheet is the default, but better to declare 
    With ActiveSheet 
     Rl = .Cells(.Rows.Count, "A").End(xlUp).Row 
     Set LookupRange = .Range(.Cells(1, 1), Cells(Rl, 2)) 
    End With 
    vCode1 = Application.VLookup(cbProductList1.Value, LookupRange, 2, False) 
    Me.tbProdCode1 = vCode1 

    ' If Me.labelCFValue is a Label, the string should be its Caption property. 
    ' If it is a Textbox the string should be its Value or Text property. 
    ' Either way, it is better to specify what you are addressing:- 
    Sp = Split(Me.labelCFValue, "!") 
    Set LookupRange = Worksheets(Sp(0)).Range(Sp(1)) 
    vPrice1 = Evaluate(Application.VLookup(vCode1, LookupRange, 2, False)) 
    Me.tbPrice1 = vPrice1 
End Sub 

いずれかのVlookupがエラーを返す可能性に対処するために、予防措置のコードを追加することを検討してください。

関連する問題