【问题标题】:VBA Vlookup returns wrong resultsVBA Vlookup 返回错误的结果
【发布时间】:2016-05-14 17:48:38
【问题描述】:

我目前正在尝试制作一个应用程序,让我可以在使用 VBA 时将销售额存储在单个工作表中。

当我尝试使用 Vlookup 来确定 ProductID 的价格以便我不必在自己中输入值时,Vlookup 总是返回相同的值“2015”

我不知道哪里出了问题

这是工作表的布局:Layout 这是我的用户表单的布局:Layout

这是我在命令按钮上使用的代码:

Private Sub CommandButton1_Click()

Dim emptyRow As Long
Dim r As Range

Dim Productprijs As Integer
Dim productaantal As Integer
Dim Eindprijs As Integer



Sheet1.Activate

emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1

Cells(emptyRow, 1).Value = TextBox1.Value
Cells(emptyRow, 2).Value = TextBox2.Value
Cells(emptyRow, 3).Value = TextBox3.Value
Cells(emptyRow, 5).Value = TextBox4.Value

Productprijs = CInt(Application.VLookup(TextBox3.Value, "J2:L2000", 3, False))
productaantal = TextBox2.Value
Eindprijs = Productprijs * productaantal
Cells(emptyRow, 4).Value = Eindprijs


UserForm1.Hide

有人可以帮我解决我的问题吗?这可能只是我目前忽略的一件小事。

感谢您的问候, 马丁

【问题讨论】:

  • 尝试用Productprijs = CInt(Range("L" & Application.Match(TextBox3.Value, Range("J:J"), 0)))替换Productprijs = CInt(Application.VLookup(TextBox3.Value, "J2:L2000", 3, False))

标签: excel vba vlookup


【解决方案1】:

您的代码有 2 个问题; "J2:L2000" 应该换成 Range("J2:L2000") (2015是2015错误的整数版本)

如果 Vlookup 找不到 Textbox3.Value,您的代码将无法工作:在这种情况下,它将返回错误:代码应该看起来更像这样

Sub testv()
    Dim v As Variant
    Dim i As Long
    v = Application.VLookup(9, Range("A1:a3"), 1, False)
    If Not IsError(v) Then
        i = CLng(v)
    Else
        MsgBox "not Found"
    End If
End Sub

【讨论】:

    【解决方案2】:

    您的代码抛出“2015 错误”,因为您将 TextBox3.Value inside VLookup 函数作为第一个参数。请注意,以下代码有效:

    Private Sub CommandButton1_Click()
        Dim emptyRow As Long
        Dim Price As Variant
        Dim Quantity As Double
        Dim Total As Double
        Dim x As Double
    
        'This finds the next empty row in the first table
        emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
    
        'Place the new values from the UserForm to the table
        Cells(emptyRow, 1).Value = TextBox1.Value 'Date
        Cells(emptyRow, 2).Value = TextBox2.Value 'Quantity
        Cells(emptyRow, 3).Value = TextBox3.Value 'ProductID
        Cells(emptyRow, 5).Value = TextBox4.Value 'Customer
    
        'Assign the value of the ProductID text box to x
        x = TextBox3.Value
    
        'Calculate the total price, using x instead of TextBox3.Value
        Price = Application.VLookup(x, Range("J2:L3"), 3, False)
    
        Quantity = TextBox2.Value
        Total = Price * Quantity
        Cells(emptyRow, 4).Value = Total
    
        UserForm1.Hide 
    End Sub
    

    这也消除了使用CInt 转换您的价格变量的需要。希望其他人能阐明为什么VLookup 中的TextBox3.Value 会引发错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      相关资源
      最近更新 更多