首页 > 解决方案 > 对象“_Worksheet”的方法“范围”在 VBA 中失败,但在使用“选择”时没有

问题描述

我正在尝试加快我的宏,它将一系列列中的公式复制并粘贴到相邻的列中。最初代码运行使用

For i = 1 To j
        ActiveSheet.Range(Columns(NumofResultsLineNamesRange), Columns(NumofResultsLineNamesRange + 119)).Select
        Selection.Copy
        Selection.Insert Shift:=xlToRight
Next i

但是我正在复制数百列,这运行起来很慢。我试图摆脱使用“选择”来加速宏并像这样重新编码:

Dim ResultTemplateSheet As Worksheet
    Set ResultTemplateSheet = Sheets("01")
Dim i As Long
Dim j As Integer
j = Sheets("Input").Range("C16").Value - 2
Dim LineNameFormula As Range
Dim NumofSummaryLineNamesRange As Integer

    ResultTemplateSheet.Range("A4").Calculate
    NumofSummaryLineNamesRange = ResultTemplateSheet.Range("A4").Value
    Set LineNameFormula = ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange), Columns(NumofSummaryLineNamesRange + 3))
    LineNameFormula.Copy Destination:=ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange + 4), Columns(NumofSummaryLineNamesRange + 4 * (j + 1)))

现在我收到此行的“对象'_Worksheet'的方法'范围'失败”错误消息:

Set LineNameFormula = ResultTemplateSheet.Range(Columns(NumofSummaryLineNamesRange), Columns(NumofSummaryLineNamesRange + 3))

我尝试Set从行中删除,我仔细检查了它NumofSummaryLinesRange是一个整数,但我不禁觉得这是一个语法错误,但我不知道在哪里?

最令人困惑的是,如果我恢复到Select. 但是,如果可能的话,我想避免这种情况。

标签: excelvba

解决方案


使用该With语句并.在您的引用之前添加将使用您的工作表类型对象Columns完全限定它。ResultTemplateSheet

With ResultTemplateSheet ' <-- Use With Statement
    .Range("A4").Calculate
    NumofSummaryLineNamesRange = .Range("A4").Value
    Set LineNameFormula = .Range(.Columns(NumofSummaryLineNamesRange), .Columns(NumofSummaryLineNamesRange + 3))
    LineNameFormula.Copy Destination:=.Range(.Columns(NumofSummaryLineNamesRange + 4), .Columns(NumofSummaryLineNamesRange + 4 * (j + 1)))
End With

推荐阅读