我有一个用户窗体,可以在列中的单元格更改时打开。 该用户表单包含复选框,这些复选框都会触发第二个用户表单,其中包含一个文本框,该文本框在隐藏表单上查找其内容的单元格。 (勾选的复选框确定文本框查找的单元格)。然后,用户编辑该框,单击按钮,然后将新文本写回同一单元格。
这是勾选复选框时的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的结果传递给该变量,以便第二个userform可以有一行读取
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”的方法“Range”失败。
我可以通过互联网上的比特进行编码,你可能会说,所以我不怀疑这是一个完整的kludge。
任何建议都会受到超级赞赏。
答案 0 :(得分:0)
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创建一个属性,您可以为其指定范围。