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 在命名范围上尝试求和函数时出现运行时错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题
将公式插入单元格 VBA Excel 时出现运行时错误 1004