我正在尝试构建一个子组件,它将公式输入到单元格中,将vlookup
公式填写到 lastrow,然后复制公式并复制pastespecial->values
整个范围。我使用的表vLookup
位于一个单独的文件中,该文件并不总是存储在同一位置。表格的格式始终相同,但表格大小并不总是相同。
我必须在 4 个不同的工作表上执行此操作,并且我必须在其中输入此公式的列的标题为“订单等级”。我使用 .Find 返回“订单等级”的位置。然后我想在找到“订单等级”的下方输入我的 Vlookup 1 行。
如果我在工作表上手动输入公式,它看起来像这样:
=VLOOKUP(C2,[newpipe.xlsx]Sheet1!$A$1:$B$376,2,FALSE)
在VBA中,我要构建的公式如下所示:
=vlookup(RC[-1],stringFileName\[newpipe.xlsx]Sheet1!$A$1:LastColumn & LastRow,2,False
用户使用打开的文件对话框选择 stringFileName。所选工作表上的 LastColumn 和 LastRow 应由宏计算。
这是我到目前为止所拥有的。
Private Function UseFileDialogOpen()
Dim myString As String
' Open the file dialog
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 1 Then
myString = .SelectedItems(1)
'MsgBox myString
UseFileDialogOpen = myString
Else
MsgBox ("Failed to properly open file")
myString = "fail"
UseFileDialogOpen = myString
End If
End With
End Function
Sub formatOrderColumn()
Dim strSearch
Dim foundColumn
Dim foundRow
Dim RowBelowSpotFound
Dim fileLocation
strSearch = "Order Grade"
Set aCell = ActiveSheet.Rows(1).Find(what:=strSearch, LookIn:=xlValues, _
Lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)
If Not aCell Is Nothing Then
foundColumn = aCell.Column
foundRow = aCell.Row
spotFound = ColumnLetter(foundColumn) & foundRow + 1
' MsgBox "Value Found in Row " & foundRow & _
" and the Column Number is " & foundColumn
Else
Exit Sub
End If
fileLocation = UseFileDialogOpen()
LastColumn = FindLastColumn(UserSelectedSheet)
LastRow = FindLastRow(UserSelectedSheet)
Range(RowBelowSpotFound).Formula = _
"=vlookup(RC[-1], [" & fileLocation & "]Sheet1!$A$1:" & LastColumn & lastrow & ",2,False"
End Sub
我不知道如何从用户选择的文件中获取 lastrow 和 lastColumn 。我有对传递给他们的任何工作表执行此操作的函数。我意识到我在解释我的情况时做得很差,我完全不确定我是否会以最好的方式去做。如果您有任何问题,请告诉我,我会尽力澄清。我很快就要离开办公室,所以可能要到早上才能回复。
这是新的公式。当我尝试将偏移单元格公式设置为字符串值时,最后一行出现错误。字符串值是正确的。如果我尝试直接设置单元格值而不使用 mystring 持有者首先构建字符串,我会得到相同的错误。“应用程序或对象定义错误”
Sub vlookupOrderGrade()
Dim strSearch
Dim fileLocation
Dim aCell As Range
Dim aCellString
Dim myString As String
strSearch = "Order Grade"
Set aCell = ActiveSheet.Rows(1).Find(what:=strSearch, LookIn:=xlValues, _
Lookat:=xlWhole, MatchCase:=True)
If Not aCell Is Nothing Then
fileLocation = UseFileDialogOpen()
If fileLocation <> "fail" Then
'replace last "\" with a "["
fileLocation = StrReverse(fileLocation)
fileLocation = Replace(fileLocation, "\", "[", 1, 1)
fileLocation = StrReverse(fileLocation)
'build string
myString = "=vlookup(" & _
ColumnLetter(aCell.Column - 1) & aCell.Row + 1 & _
", '" & fileLocation & "]Sheet1'!$A:$B,2,False"
MsgBox (myString)
'set cell to string
aCell.Offset(1, 0).Formula = myString
End If
Else
Exit Sub
End If
End Sub