简单的VBA脚本错误

时间:2016-06-01 20:30:24

标签: excel vba excel-vba

我对VBA(学习工作,来自JS背景)仍然很新,我需要一些帮助。我的目标是:遍历每个工作表(除了“摘要”表,但我不确定如何从循环中排除它)并在每个工作表中复制A2,以及包含值的最后一个单元格每张纸的L列,并分别在“摘要表”中的A列和B列中将它们彼此相邻。我不是任何VBA语法的专家,所以如果有人有任何方法可以重构这个(我知道我不需要所有的.select方法),我将不胜感激。现在我在第28行得到了“无效或不合格的引用”错误。我的目标是学习,所以如果你有任何意见,我会很感激逻辑的简短解释。感谢。

vissim

2 个答案:

答案 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之旅!