我对VBA(学习工作,来自JS背景)仍然很新,我需要一些帮助。我的目标是:遍历每个工作表(除了“摘要”表,但我不确定如何从循环中排除它)并在每个工作表中复制A2,以及包含值的最后一个单元格每张纸的L列,并分别在“摘要表”中的A列和B列中将它们彼此相邻。我不是任何VBA语法的专家,所以如果有人有任何方法可以重构这个(我知道我不需要所有的.select方法),我将不胜感激。现在我在第28行得到了“无效或不合格的引用”错误。我的目标是学习,所以如果你有任何意见,我会很感激逻辑的简短解释。感谢。
vissim
答案 0 :(得分:2)
您可以避免使用.Select¹通过构造将With ... End With statement传递给父工作表引用以及单元格和范围引用。直接价值转移比复制和粘贴更方便,更有效。此外,它完全避免涉及剪贴板。
Sub Macro7()
Dim ws As Worksheet
Dim lastRow As Long
Dim summaryRow As Long
summaryRow = 1
For Each ws In ActiveWorkbook.Worksheets
With ws
If LCase(.Name) <> "summary" Then
Worksheets("Summary").Range("A" & summaryRow).Resize(1, 2) = _
Array(.Range("A2").Value, .Cells(Rows.Count, "L").End(xlUp).Value)
summaryRow = summaryRow + 1
End If
End With
Next ws
End Sub
.¹有关远离依赖select和activate以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros。
答案 1 :(得分:1)
除了“。”之外,您的代码看起来很好。参考Jeeped指出。
我刚刚把你的代码整理成使用.select有点凌乱和啰嗦(如果你正在构建大的宏,它可以添加不必要的工作并减慢很多)。
您可以直接从范围参考中执行命令,如下所示:
is_shop()
我通常编写工作表(“”)。范围(“”)。每次动作,除非我在1张纸上做了很多工作,以便我能够轻松看到当我浏览时发生了什么,但是你找到你自己的工作偏好(不要忘记你可以通过F8逐步完成你的代码,看看它在每一步都做了什么)
我希望这有助于您开始VBA之旅!