通过命名范围的Vlookup

时间:2019-02-11 15:37:02

标签: excel vba

我有一本工作簿,其中有一张主纸和其余纸。基本上,我的代码所做的是它遍历工作簿(未命名为“ Main”)中的工作表,并提取值并将其放入Main工作表的适当列中。 IsError检查Sheetname是否已存在于列表中(如果存在)-不会添加值。 工作表的布局非常混乱,其中包含许多合并的单元格-https://imgur.com/cayZXUA

因此,在每个工作表(主表除外)中,我都有一个块,其中包含“工资单”,“合并社会税”和“其他支出”的值。我想到了在每个工作表名称“ Assumptions”中赋予这些块的想法,并为每个工作表确定了范围,以便可以在所有工作表中重复“ Assumptions”,并且可以遍历整个工作表。这是该图块的图片-https://imgur.com/nPYyLbM

代码可以运行,但我得到#VALUE!我的主要工作表上的错误-https://imgur.com/a/H2TOFmW 很抱歉,我没有链接发布图片

这是代码本身:

Sub Sheets()
Dim wsheet As Worksheet

With ThisWorkbook.Sheets("Main")

  For Each wsheet In ThisWorkbook.Sheets

    If wsheet.Name <> "Main" Then
       Set nextEntry = .Cells(.Rows.Count, "G").End(xlUp).Offset(1, 0)
       Set nextEntry_payroll = .Cells(.Rows.Count, "AI").End(xlUp).Offset(1, 0)
       Set nextEntry_consolidated_social_tax = .Cells(.Rows.Count, "AJ").End(xlUp).Offset(1, 0)
       Set nextEntry_miscellaneous_expenditures = .Cells(.Rows.Count, "AK").End(xlUp).Offset(1, 0)

       If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then
          nextEntry.Value = wsheet.Name
          nextEntry_payroll.Value = wsheet.Application.VLookup("payroll", "Assumptions", 3, 0)
          nextEntry_consolidated_social_tax.Value = wsheet.Application.VLookup("consolidated social tax", "Assumptions", 3, 0)
          nextEntry_miscellaneous_expenditures.Value = wsheet.Application.VLookup("miscellaneous expenditures", "Assumptions", 3, 0)
       End If
    End If
  Debug.Print wsheet.Name
  Next wsheet
End Sub

1 个答案:

答案 0 :(得分:0)

从更改VLookup功能

wsheet.Application.VLookup("payroll", "Assumptions", 3, 0)

 Application.VLookup("payroll", wSheet.Range("Assumptions"), 3, 0)

,另外两个同样如此。

或者,您可以使用VLookup工作表函数来更改它,而不是在VBA中计算值:

nextEntry_payroll.Formula = "=VLookup(""payroll"", " & wsheet.Name & "!Assumptions, 3, 0)"

,其他两个同样。尝试看看有什么区别。