【问题标题】:Use VLOOKUP to pass cell reference to a public variable?使用 VLOOKUP 将单元格引用传递给公共变量?
【发布时间】:2015-04-10 09:17:56
【问题描述】:

我有一个用户表单,可以在列中的单元格更改时打开。 该用户窗体包含复选框,它们都会触发带有文本框的第二个用户窗体,该文本框在隐藏工作表上查找其内容的单元格。 (勾选的复选框决定了文本框要查找的单元格)。然后用户编辑该框,单击一个按钮,新文本将写回同一单元格。

这是勾选复选框时的 VBA。它工作得很好。万岁!

Dim vln As Variant
Dim reta As Worksheet

Set reta = ActiveWorkbook.Sheets("RetailerActivity")
Set vln = ActiveCell.Offset(-1, -3)

UserForm2.TextBox1.Text = Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False)

UserForm2.TescoSave.Visible = True
UserForm2.Show

End Sub

当文本框被编辑后,我想把它写回它来自的同一个单元格。我认为最简单的方法是拥有一个公共变量(作为范围),并将 vlookup 的结果传递给该变量,以便第二个用户窗体可以有一行读取

Private Sub ASave_Click()

publicvariable.Value = TextBox1.Value
userform1.hide

End Sub

很好很容易,而不是再次进行 VLookup。对?

无论哪种方式,我似乎都无法将公共变量设置为查找。

在我拥有的任何子之外

Public bums As Range

在上面的代码中,在我设置文本框的位置之后,我尝试添加该行

Set bums = Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False)

但代码错误与“类型不匹配”。

如果我尝试

Set bums = Range(Application.WorksheetFunction.VLookup(vln, reta.Range("A1:Z100"), 3, False))

我得到对象“_global”的方法“范围”失败。

我通过从互联网上拼凑出来的代码进行编码,正如您可能知道的那样,所以我不怀疑这是一个完整的组合。

任何建议将不胜感激。

【问题讨论】:

    标签: vba excel excel-formula vlookup


    【解决方案1】:

    VLookup 返回一个值,而不是 Range。您可以使用 Match 查找行,然后使用 Cells 获取实际参考 - 例如:

    Dim vMatch
    vMatch = Application.Match(vln, reta.Range("A1:A100"),0)
    If Not IsError(vMatch) then 
    Set bums = reta.Cells(vMatch, "C")
    else
    msgbox "No match for " & vln
    Exit Sub
    End If
    

    我个人也不会使用公共变量,而是为 Userform2 创建一个属性,您可以为其分配范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 2017-06-30
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 2015-01-09
      • 1970-01-01
      相关资源
      最近更新 更多