运行时错误1004消息-无法获取WorksheetFunction类的VLookup属性



我希望有人能帮助

运行时错误1004消息-无法获取WorksheetFunction类的VLookup属性。

我遇到了两个问题,都与此错误代码有关。

我有一个文件,其中包含一个用户表单,通过它我可以轻松地添加和修改记录。自从我最近升级到Surface Pro 7以来,我被迫通过我的MS帐户使用MS 365。和许多其他人一样,我的许多文件都受到了Excel365-64位中丢失的工具和函数的影响。通过选择安装32位版本,我已经能够恢复这些工具和功能,但是,我仍然有一些问题。

问题1-当我试图在用户窗体的查找文本框中输入数值时,会出现此错误。虽然这不是以前版本的Excel的问题,但MS 365的问题。为了避免这种情况,我被要求将所有查找值转换为文本格式。不太好,但它有效。

现在解决了这个问题,出现了另一个问题,返回相同的运行时错误和消息。

问题2-我的用户表单使用框架来分隔不同的信息组,并且我已经将选项卡设置为按正确的顺序移动。因此,我初始化了用户表单并完成了所需的详细信息,查找单元也能完美地工作。我使用命令按钮将记录添加到工作表中,并清除和设置用户表单,就像刚刚打开一样。

我开始在";清除";表单,并且在我选项卡到第三个框架之前没有问题,该框架包含查找文本框。在我输入任何信息之前,我会得到相同的运行时错误。

有5个这样的查找文本框,但当我在代码中检查调试时,高亮显示的是这些文本框中最后一个的代码。我还没有隔离这个文本框,看看错误是否仍然出现,调试会突出显示下一个最后的代码。

表单和代码应该对输入的第一条记录有效,但对随后的记录却失败,这似乎不合逻辑,尤其是当两者都使用相同的初始化代码时。

下面是查找代码(它包括一个检查以确保匹配记录出现在查找表中(和"匹配"的最后几行;添加记录";将详细信息添加到工作表后清除表单的命令代码。

将竭诚接受任何帮助

Vlookup代码

Private Sub txtDepotCode_AfterUpdate()
'Looks up the Depot Location and Operator information and applies this to the databasse and the user form
If WorksheetFunction.CountIf(Sheet2.Range("J2:L250"), Me.txtDepotCode.Value) = 0 Then
MsgBox "This is an invalid code", 0, " Validation Check"
Me.txtDepotCode.SetFocus
Me.txtDepotCode.Value = ""
Exit Sub
End If

With Me
.txtDepotLocation = Application.WorksheetFunction.VLookup(Me.txtDepotCode, Sheet2.Range("J2:L250"), 2, False)
.txtDepotOperator = Application.WorksheetFunction.VLookup(Me.txtDepotCode, Sheet2.Range("J2:L250"), 3, False)
End With
End Sub

添加记录代码(最终行动(

Call UserForm_Initialize
cboType.SetFocus

也用于初始化用户窗体和清除用户窗体的命令。

使用Application.Match查找

Private Sub txtDepotCode_AfterUpdate()

Dim rg As Range: Set rg = Sheet2.Range("J2:L250")
Dim cString As String: cString = Me.txtDepotCode.Value
Dim cIndex As Variant: cIndex = Application.Match(cString, rg.Columns(1), 0)

If IsNumeric(cIndex) Then
Me.txtDepotLocation = rg.Cells(cIndex, 2).Value
Me.txtDepotOperator = rg.Cells(cIndex, 3).Value
Else
MsgBox "This is an invalid code", 0, " Validation Check"
Me.txtDepotCode.SetFocus
Me.txtDepotCode.Value = ""
End If
End Sub

最新更新