VBA 在命名范围上尝试求和函数时出现运行时错误

Posted

技术标签:

【中文标题】VBA 在命名范围上尝试求和函数时出现运行时错误【英文标题】:VBA getting runtime error when trying sum function on named range 【发布时间】:2018-09-25 08:08:50 【问题描述】:

您好,我正在尝试将来自 2 个不同工作簿的 2 个工作表放入一个工作簿中,所以最后有一个工作簿,其中包含 3 个工作表(GrNegLos、VýsRek、NegLos)。当我尝试使用这行代码在 sheet(VýsRek) 中使用 sum 函数时:

With VýsRek
NetLossSAP = Application.WorksheetFunction.Sum(Range("DATA17"))
End With

它给了我运行时错误 1004 对象全局的方法范围失败。当我检查工作簿时,我可以看到当我单击工作表(VýsRek)时工作表(NegLos)处于活动状态,然后它就可以工作了。但是我已经命名了范围,并且我指定了我想在哪个工作表中使用 sum 函数。我不明白为什么会这样。

    Sub Dáta()
Dim dátum As String
Dim TotalNLos, Loss10 As Integer
Dim GrossLoss, NetLossSAP As Double

Dim SAP As Workbook
Dim LORD_rep As Workbook
Dim dash As Workbook

Dim GrNegLos As Worksheet
Dim VýsRek As Worksheet
Dim NegLos As Worksheet

Dim rw As Long
Dim col As Long

Application.ScreenUpdating = False

Set dash = Workbooks.Open("")
Set GrNegLos = dash.Worksheets("Graf Neg. Loss")


Set SAP = Workbooks.Open("")
Set VýsRek = Worksheets("Výsledok rekonciliácie")
    VýsRek.Move after:=GrNegLos
    SAP.Close savechanges:=False

Set LORD_rep = Workbooks.Open("")
Set NegLos = Worksheets("Negative Losses")
    NegLos.Move after:=GrNegLos
    LORD_rep.Close savechanges:=False


Set NegLos = dash.Worksheets("Negative Losses")
Set VýsRek = dash.Worksheets("Výsledok rekonciliácie")

With VýsRek
NetLossSAP = Application.WorksheetFunction.Sum(Range("DATA17"))
End With
GrossLoss = NegLos.Range("CVNŠ")
TotalNLos = NegLos.Range("PNŠ")
Loss10 = NegLos.Range("PNŠvýš10k")
dátum = InputBox("Zadajte dátum")


rw = GrNegLos.Range("A2").End(xlDown).Offset(1, 0).Row
col = GrNegLos.Range("A2").End(xlDown).Offset(1, 0).Column
'Debug.Print rw
'Debug.Print col
    GrNegLos.Cells(rw, col).Value = dátum
    GrNegLos.Cells(rw, col + 1).Value = TotalNLos
    GrNegLos.Cells(rw, col + 2).Value = Loss10
    GrNegLos.Cells(rw, col + 3).Value = GrossLoss
    GrNegLos.Cells(rw, col + 4).Value = NetLossSAP

Application.DisplayAlerts = False
On Error Resume Next

VýsRek.Delete
NegLos.Delete

Application.ScreenUpdating = True

End Sub

【问题讨论】:

如果工作表名称正确,请将工作表名称放在 Range("DATA17") Application.WorksheetFunction.Sum(Worksheets(VýsRek).Range("DATA17")) 之前。 命名范围“DATA17”是否在工作表“VýsRek”上定义? @QHarr Thaks 寻求帮助,但你能解释一下为什么我的方法不起作用吗? @shahkalpesh 是的 @TooMachoBA 我想 QHarr 的评论有帮助。它是搜索命名范围的上下文。尝试放置 ActiveSheet.Name 以查看存在哪个工作表,您会发现它没有定义该命名范围。 【参考方案1】:

您需要完全限定命名范围引用,以便查看正确的工作表。如果您未指定,则当前活动的工作表 (ActiveSheet) 将被隐式地作为父引用。如果这不是命名范围所在的正确工作表,那么您将收到您观察到的错误。

始终完全限定范围,因为不引用容易出错,例如

Application.WorksheetFunction.Sum(VýsRek.Range("DATA17")) 

【讨论】:

以上是关于VBA 在命名范围上尝试求和函数时出现运行时错误的主要内容,如果未能解决你的问题,请参考以下文章