我有一本工作簿,其中有一张主纸和其余纸。基本上,我的代码所做的是它遍历工作簿(未命名为“ 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
答案 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)"
,其他两个同样。尝试看看有什么区别。