【问题标题】:Excel userform vbaExcel用户表单vba
【发布时间】:2018-04-02 11:42:43
【问题描述】:

我有一个带有多个文本框的用户表单(Arow1Arow2,......)。当表单打开时,文本框由工作表中的值填充: 代码是

Private Sub Arow3_Change()

On Error Resume Next
Me.Arow2.RowSource = ""
Me.Arow4 = Application.WorksheetFunction.VLookup(Me.Arow2, Sheet5.Range("Data"), 2, 0)
Me.Arow6 = Application.WorksheetFunction.VLookup(Me.Arow2, Sheet5.Range("Data"), 4, 0)
Me.Arow5 = Application.WorksheetFunction.VLookup(Me.Arow2, Sheet5.Range("Data"), 6, 0)
If Me.Arow3.Value > "" Then Me.Arow7 = Me.Arow3.Value * Me.Arow6.Value
On Error GoTo 0

End Sub

参考

  • "Data" 指名称范围,数据范围2"Code no."
  • 数据范围4指的是"Sale Price"
  • 数据范围6指的是"Stock"
  • Arow3 被命名为 "Quantity"
  • Arow4 被命名为 "Code No
  • Arow5 被命名为 "Stock"
  • Arow6 被命名为 "Sale Price"
  • Arow7 被命名为 "Total"

我需要做的是在Arow6 上我需要手动将值放在用户表单上,该值将在Arow7 (Quantity * Sale Price = Total) 上计算

如何在上面给出代码的情况下做到这一点?

【问题讨论】:

  • 你能解释一下是什么问题吗?你有错误吗?什么表现不如你所愿?

标签: vba excel userform


【解决方案1】:

摆脱On Error Resume Next - On Error GoTo 0 块,看看处理实际错误的真正情况

使用val() 函数将字符串文本框值转换为实数数字

所以你可能想试试这个:

Private Sub Arow3_Change()
    With Me
        If Not IsNumeric(.Arow3) Then Exit Sub
        .Arow2.RowSource = ""
        .Arow4 = Application.WorksheetFunction.VLookup(.Arow2, Sheet5.Range("Data"), 2, 0)
        .Arow6 = Application.WorksheetFunction.VLookup(.Arow2, Sheet5.Range("Data"), 4, 0)
        .Arow5 = Application.WorksheetFunction.VLookup(.Arow2, Sheet5.Range("Data"), 6, 0)
        If val(.Arow3.Value) > 0 Then .Arow7 = val(.Arow3.Value) * val(.Arow6.Value)
    End With
End Sub

如果您想管理可能的 LookUp 错误(应该 Arow2 文本框输入值而不是 Application.VLookup 函数并检查其返回的 Variant 值是否为 Error

Private Sub Arow3_Change()
    Set Sheet5 = Worksheets("Sheet05")
    With Me
        If Not IsNumeric(.Arow3) Then Exit Sub
        .Arow2.RowSource = ""
        .Arow4 = GetLookUp(.Arow2, 2)
        .Arow6 = GetLookUp(.Arow2, 4)
        .Arow5 = GetLookUp(.Arow2, 6)
        If val(.Arow3.Value) > 0 Then .Arow7 = val(.Arow3.Value) * val(.Arow6.Value)
    End With
End Sub

Function GetLookUp(lookUpValue As Variant, iPos As Long) As Variant
    GetLookUp = Application.VLookup(lookUpValue, Sheet5.Range("Data"), iPos, 0)
    If IsError(GetLookUp) Then GetLookUp = ""
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2020-12-23
    • 2021-11-20
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多