我有:
代码段1:
For Each sheet In WB.Sheets
wbSheetNames.Add(sheet.Name)
Next sheet
摘录2:
For i = 0 To sheetNames.Count - 1
wb.Sheets(i + 2).Name = sheetNames(i).Replace(currMonth, nextMonth)
Next
摘录3:
For Each cell In row
If cell.Formula.Contains(nameString) Then
downRange(sheet, cell.Address()).Value = downRange(sheet, cell.Address()).Value
End If
Next cell
摘录4:
For Each sheet In sheetsToDelete
sheet.Activate()
sheet.Delete()
Next sheet
是否有一些构造或方法可以在一行中完成这些?
注意:
所有的片段都是不同的,不应该是杵状的。在这种情况下,我认为可能有更聪明的方法来完成这些简单的任务。
答案 0 :(得分:1)
使用一些LINQ可能会使其中一些使用更少的行,但其中大多数都不会非常易读。您应该编写可维护性的代码,而不仅仅是为了完成工作。如果您正在考虑性能:使用尽可能少的行并不是优化的良好指示。
假设wbSheetNames是一个String列表,Snippet 1本身可以简化为一行:
wbSheetNames.AddRange(WB.Sheets.Select(Function(x) x.Name))
改进?并不是的。您可以使用以下内容删除不属于代码段的列表分配:
wbSheetNames = WB.Sheets.Select(Function(x) x.Name).ToList()
这可以说比原作略有改进。
话虽如此:看起来您可以将代码段1和2结合起来,从而节省了临时列表的分配。然而,代码的确切意图并不清楚。在某处你正在添加两张纸?否则我会认为wb.Sheets(i + 2)
将超出范围。
答案 1 :(得分:0)
您可以使用ForEach扩展程序。
答案 2 :(得分:0)
因此,没有办法减少任何模板。
在某些地方使用:
技巧.. Thanx为此!