如何使用vba应用vlookup之后取回公式?

我有一个VBA脚本应用从一个Excel文件另一个文件的查找。 它的工作正常,但输出excel文件只包含输出数据,但我需要该vlookup输出的公式,因为我需要应用相同的东西下一步使用复制粘贴,所以我需要一个帮助,以获得公式也在输出excel。 这是我的vba脚本

Sub vloo() Dim rng As Range Dim user As String Dim file As String Dim n As Integer Dim m As Integer Dim c As Integer Dim a As Variant n = 1 m = 0 c = 2 file = "E:\output8.xls" Workbooks.Add ActiveWorkbook.SaveAs file Set nb = Application.Workbooks.Open(file) Set ns = nb.Worksheets("Sheet1") 'get workbook path filename = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx), *.xls", Title:="Please select a file") 'set our workbook and open it Set wb = Application.Workbooks.Open(filename) 'set our worksheet Set ws = wb.Worksheets("Sheet1") 'set the range for vlookup Set rng = ws.Range("F:AI") For y = 6 To 20 m = m + 1 user = MsgBox(ws.Cells(1, y), 4, "You Want This") If user = 6 Then ns.Cells(1, n) = ws.Cells(1, y) ns.Cells(1, n).Interior.Color = vbYellow n = n + 1 If m > 1 Then ns.Cells(2, c).Value = Application.VLookup(ns.Cells(2, 2).Value, rng, m, False) c = c + 1 End If End If Next End Sub 

执行完这个脚本后,输出excel ns,并在每个条目中按F2,但只有数据不知道为什么公式不存在,所以我也需要公式。

简单地改变你的脚本,以便它写公式而不是评估它

改变这个:

 ns.Cells(2, c).Value = Application.VLookup(ns.Cells(2, 2).Value, rng, m, False) 

对此(修改完全限定VLookup第三个参数中使用的范围):

 ns.Cells(2, c).Formula = "=VLookup(" _ & ns.Cells(2, 2).Value & "," _ & "[" & rng.Parent.Parent.Name & "]'" & rng.Parent.Name & "'!" & rng.Address & "," _ & m & "," _ & "False)" 

如果你debugging,假设我没有任何错别字,那么应该有第三个参数,如下所示:

 [Mains_heet_for_SEA_October14.xlsx]'Sheet1'!$F$2:$M$2 

请注意,这可能会降低macros,因为公式可能会在运行时重新评估。 如果这变成了一个问题,可以使用Application.Calculation属性来解决这个问题。

UPDATE

原则上可以使用Debug语句来validation这个工作。 如果你愿意的话,把它放在自己的程序中,像下面这样testing它:

 Sub foo() Dim rng As Range Dim m As Integer m = 3 Set rng = Range("A1:D10") Debug.Print "=VLookup(" _ & "some_value" & "," _ & "[" & rng.Parent.Parent.Name & "]'" & rng.Parent.Name & "'!" & rng.Address & "," _ & m & "," _ & "False)" End Sub 

这是certificate这是有效的:

在这里输入图像说明