Excel VBA 中的 Vlookup 公式

Vlookup Formula in Excel VBA

我有一个 Excel sheet 单元格锁定。一些单元格被解锁以输入值。有很多值要输入,因此我正在尝试编写一个宏,它将:select Active Sheet 中未锁定的单元格,并使用看起来像的 Vlookup 公式填充 selected 单元格根据同一 sheet 中的第一列和相关行从单独的 sheet 中的 table 向上输入值。我试过以下方法:

Sub SelectUnlockedCells()
'Update 20130830
Dim WorkRng As Range
Dim OutRng As Range
Dim Rng As Range
On Error Resume Next
Set WorkRng = Application.ActiveSheet.UsedRange
Application.ScreenUpdating = False
For Each Rng In WorkRng
    If Rng.Locked = False Then
        If OutRng.Count = 0 Then
            Set OutRng = Rng
        Else
            Set OutRng = Union(OutRng, Rng)
        End If
    End If
Next
If OutRng.Count > 0 Then OutRng = Application.WorksheetFunction.VLookup("A" & ActiveRow.Value, Worksheets(2).Columns("A:C").Select, Worksheets(2).Columns(3).Select, False)
Application.ScreenUpdating = True
End Sub

我知道我的问题出现在 Vlookup Worksheet 函数的最后 4 行,因为如果我说:

If OutRng.Count > 0 Then OutRng = 1 + 1

解锁的输入单元格被正确估算为 2。因此我怀疑我的 Vlookup 对象 selection 不正确。

任何帮助都会很棒,谢谢!

您根本没有在这些单元格中输入公式,您试图在其中输入一个值,而您的语法无论如何都是完全错误的。尝试:

If OutRng.Count > 0 Then OutRng.FormulaR1C1 = "=VLookup(RC1,'" & worksheets(2).name & "'!C1:C3,3,FALSE)"

我发现的简单解决方案正如我所怀疑的那样 - vlookup 中的对象引用是错误的。此外,在这种情况下,应用程序工作表功能是多余的。在倒数第三行解决方案是:

If OutRng.Count > 0 Then OutRng = "=VLOOKUP(A11,'Sheet1'!Table1,3,FALSE)"