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 在命名范围上尝试求和函数时出现运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

刷新listobject命名范围时出现运行时错误

执行 vba 查询 ms 访问时出现运行时错误 3075

尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题

将公式插入单元格 VBA Excel 时出现运行时错误 1004

运行查询时出现运行时错误 3075 MS Access VBA

使用 Range 类在 VBA 中创建宏时出现运行时错误 1004