[英]How to get back formula after applied vlookup using vba?
我有VBA脚本,它从一个excel文件到另一个文件应用vlookup。 它的工作正常,但输出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)"
如果您进行调试,并假设我没有输入任何错字,则该文本应具有第三个参数,如下所示:
[Mains_heet_for_SEA_October14.xlsx]'Sheet1'!$F$2:$M$2
请注意,这可能会减慢宏的速度,因为公式可能会在运行时重新评估。 如果有问题,可以使用Application.Calculation
属性解决此问题。
更新
您可以使用Debug
语句从原理上验证此功能。 如果愿意,将其放在自己的过程中,然后进行如下测试:
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
这证明这有效:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.