对象'_Global'的方法'范围'失败

时间:2013-09-26 15:10:23

标签: vba loops

我正在尝试遍历三个下拉列表中的项目,其中包含命名范围A,B和C.摘要输出根据所选下拉列表中的项目而更改。我想复制每个摘要输出(19行乘15列的表格)并将它们粘贴到新的表格(表3)中。

例如,如果我在列表A中有3个项目,列表B中有2个项目,列表C中有2个项目,那么我需要将总共12个输出(3 * 2 * 2)粘贴到表格3中。

当我运行此代码时,出现以下错误:

对象'_Global'的方法'范围'失败

我将不胜感激任何帮助!我是VBA编程的新手,所以我相信有一种更有效的方法可以做到这一点......

谢谢!

Sub SummarizeData()
    '
    ' SummarizeData Macro
    '

    Dim rngCeded As Range
    Dim rngTF As Range
    Dim rngFX As Range
    Dim LOS As Integer

    Set rngCeded = Range("A")
    Set rngTF = Range("B")
    Set rngFX = Range("C")

    LOS = 19
    For n = 1 To 12
        For Each i In Range("A")
            For Each j In Range("B")
                For Each k In Range("C")
                    Sheets("Summary").Range("SummaryData").Copy
                    Sheets("Sheet3").Range("E5").Offset(i - 1, 0).PasteSpecial Paste:=xlPasteValues
                Next k
            Next j
        Next i
    n = n + LOS
    Next n
    End Sub

2 个答案:

答案 0 :(得分:1)

由于您没有指定Range来自哪里(Set rng = Range("...")),因此代码的结果取决于您调用该方法的上下文。

最好调用特定对象的Range方法。在您的情况下,这可能是一个Worksheet对象,类似于:

' ...
Dim MySheet As Excel.Worksheet
Set MySheet = ActiveWorkbook.Sheets("MySheet")
Set rngCeded = MySheet.Range("A") 
' ...

答案 1 :(得分:0)

您不能将大写和小写字符“C”,“c”,“R”或“r”用作定义名称,因为它们都用作选择当前所选行或列的简写在“名称”或“转到”文本框中输入单元格时。

Reference

Sub SummarizeData()
    '
    ' SummarizeData Macro
    '

    Dim rngCeded As Range
    Dim rngTF As Range
    Dim rngFX As Range
    Dim LOS As Integer

    Set rngCeded = Range("A")
    Set rngTF = Range("B")
    Set rngFX = Range("D")

    LOS = 19
    For n = 1 To 12
        For Each i In Range("A")
            For Each j In Range("B")
                For Each k In Range("D")
                    Sheets("Summary").Range("SummaryData").Copy
                    Sheets("Sheet3").Range("E5").Offset(i - 1, 0).PasteSpecial Paste:=xlPasteValues
                Next k
            Next j
        Next i
    n = n + LOS
    Next n
    End Sub