我遇到的问题是将VLookup功能从Cell移动到宏返回#N / A.
现在,我有一个表引用第二个未格式化的表来构建格式化列表。格式化列表使用一系列VLOOKUP命令来填充,但这需要手动输入一个新行和' SubPart'名。
我正在编写一个宏,只需单击即可读取整个源表并填充新的格式化表。
不幸的是,当它从单元格转移到宏时,我似乎无法使VLOOKUP工作。
Sub PopulateSubs()
On Error GoTo MyErrorHandler:
Dim SubAssy, SubPart As String
Dim BomCount, i As Integer
Dim BlankRow As Long
Dim Source_Table As ListObject
Set Source_Table = Worksheets("BoMs").ListObjects("Table_Query_From_Syspro")
SubAssy = InputBox("Enter the Subassembly:")
If Len(SubAssy) > 0 Then
BomCount = Application.CountIf(Range("Table_Query_from_Syspro[ParentPart]"), SubAssy)
For i = 1 To BomCount
BlankRow = Range("A10000").End(xlUp).Row + 1
Cells(BlankRow, 1).Select
SubPart = SubAssy & i
ActiveCell = i
ActiveCell.Offset(0, 1).Select
ActiveCell = Application.WorksheetFunction.VLookup(SubPart, Source_Table, 2, 0)
ActiveCell.Offset(0, 1).Select
ActiveCell = Application.WorksheetFunction.VLookup(SubPart, Source_Table, 3, 0)
Next i
Else
MsgBox "You entered an invalid value"
End If
MyErrorHandler:
If Err.Number = 1004 Then
MsgBox "Sub assembly Not Present in the table."
End If
End Sub
手册表中的VLOOKUP正常工作,但我无法在此应用程序中返回#N / A以外的任何内容。
我在这个网站上看过类似的解决方案,并使用SubPart运行宏作为" SubPart"以及"" SubPart""但这两个词都没有帮助。
源表格被格式化为所有单元格的常规,我不确定这是否会导致类型与字符串条目不匹配。
谢谢!
答案 0 :(得分:0)
你调用vlookup的方式不起作用是因为它是Worksheetfunction的成员,试试;
Application.Worksheetfunction.VLookup
这适用于大多数excel公式。有一些函数嵌入在vba中,如min / max / now,并且不必特别通过Worksheetfunction成员调用。
答案 1 :(得分:0)
这很好用 ... Application.WorksheetFunction.VLookup(SubPart,Application.Range(“Source_Table”),6,False)