繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM