VBA返回错误“ Sub或Function undefined”

时间:2018-09-30 05:04:28

标签: vba excel-vba

Function tenderSummary()
    For i = 5 To 10
        If cell(i, 66) <> "" Then
            If Range("TenderPrice") <> "" Then
                Range("TenderTicker").Copy cell(i, 66)
                Range("Quantity").Copy cell(i, 67)
                Range("TenderPrice").Copy cell(i, 68)
                Range("Start").Copy cell(i, 69)
                Range("End").Copy cell(i, 70)
            End If
            If Range("TenderPrice2") <> "" Then
                Range("TenderTicker2").Copy cell(i, 66)
                Range("Quantity2").Copy cell(i, 67)
                Range("TenderPrice2").Copy cell(i, 68)
                Range("Start_2").Copy cell(i, 69)
                Range("End_2").Copy cell(i, 70)
            End If
            If Range("TenderPrice3") <> "" Then
                Range("TenderTicker3").Copy cell(i, 66)
                Range("Quantity3").Copy cell(i, 67)
                Range("TenderPrice3").Copy cell(i, 68)
                Range("Start_3").Copy cell(i, 69)
                Range("End_3").Copy cell(i, 70)
            End If
        End If
    Next
End Function

对于上述代码,我不断收到“未定义Sub或Function”的消息,有人可以解释为什么吗?

本质上,我有我的变量:TenderPrice,TenderTicker,数量,开始,结束(与TenderPrice2,...,End2和标有3的变量相同),这些变量本质上是动态的,这意味着它们在消失之后大约20秒钟左右。

我的任务是构建一个招标摘要,以将这些招标作为静态数据保留在原处,而上面就是我写的内容-复制粘贴在第一行中,如果第一行中已有数据,则跳过第一行第二个,依此类推。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

  1. Range.Cells property是复数形式;例如细胞不是细胞。
  2. 对于任何Cells(r,c)引用都没有有效的父级工作表引用。您没有提供有关命名范围所在位置的信息。如果它们在同一工作表上,则可以将它们包含在With ... End With块中。
  3. 使用ElseIf将减少冗余计算。

代码重写:

Function tenderSummary()

    With worksheets("model")

        For i = 5 To 10
            If .Cells(i, 66) <> "" Then
                If Range("TenderPrice") <> "" Then
                    Range("TenderTicker").Copy .Cells(i, 66)
                    Range("Quantity").Copy .Cells(i, 67)
                    Range("TenderPrice").Copy .Cells(i, 68)
                    Range("Start").Copy .Cells(i, 69)
                    Range("End").Copy .Cells(i, 70)
                ElseIf Range("TenderPrice2") <> "" Then
                    Range("TenderTicker2").Copy .Cells(i, 66)
                    Range("Quantity2").Copy .Cells(i, 67)
                    Range("TenderPrice2").Copy .Cells(i, 68)
                    Range("Start_2").Copy .Cells(i, 69)
                    Range("End_2").Copy .Cells(i, 70)
                ElseIf Range("TenderPrice3") <> "" Then
                    Range("TenderTicker3").Copy .Cells(i, 66)
                    Range("Quantity3").Copy .Cells(i, 67)
                    Range("TenderPrice3").Copy .Cells(i, 68)
                    Range("Start_3").Copy .Cells(i, 69)
                    Range("End_3").Copy .Cells(i, 70)
                End If
            End If
        Next

    End With

End Function