我在编码中遇到了一个问题,谷歌问得好些的问题不再对我有帮助。我的代码中有两个For循环。它们对于我在工作簿中的循环中设置的第一个工作表可以正确执行。但是,更改为下一个工作表会出现运行时错误:
我要做什么:
我有测量数据。这些在不同的工作表中针对不同的温度范围进行组织。我想遍历数据中相关工作表中的相关列,以找到这些列的平均值。最后,我想将平均值保存到相应标题的第一个工作表中。 (最后一部分我还没有编写任何代码。)
非常感谢您的帮助。
Option Explicit
Sub TestAv()
Dim ColCount As Long
Dim ws As Worksheet
Dim LastRow As Long
Dim j, k, ColCount2, wsCount As Long
Dim rngAv As Range
Dim rngAverage As Double
Dim Lr As Long
Dim newBook As Workbook
Dim firstSheet As Worksheet
Set newBook = ActiveWorkbook
Set firstSheet = newBook.Sheets(1)
Application.ScreenUpdating = False
' making firstSheet representable
ColCount = newBook.Worksheets(2).Columns.Count ' all TCs should have been measured for the first temperature
newBook.Worksheets(2).Activate
Range(Cells(1, 2), Cells(1, ColCount)).Copy
firstSheet.Activate
firstSheet.Range("B1").Select
firstSheet.Paste
Application.CutCopyMode = False
Application.CutCopyMode = True
firstSheet.Range("A1").Value = "Temperaturen"
firstSheet.Name = "Mittelwerte"
' calculating mean values in columns of Worksheets
wsCount = newBook.Worksheets.Count
For j = 2 To wsCount
LastRow = firstSheet.Range("A" & Rows.Count).End(xlUp).Row + 1
Set ws = newBook.Worksheets(j)
firstSheet.Range("A" & LastRow).Value = ws.Name
ColCount2 = ws.Columns.Count
ws.Activate
Lr = ws.Range("A" & Rows.Count).End(xlUp).Row - 1
For k = 2 To ColCount2
Set rngAv = ws.Range(ws.Cells(2, k), ws.Cells(Lr, k))
rngAverage = Application.Average(rngAv)
Cells(Lr + 2, k).Value = rngAverage
Next k
Set rngAv = Nothing
Set ws = Nothing
Next j
Application.ScreenUpdating = True
' Mean Values of TCs for different Temperatures in firstSheet
End Sub
答案 0 :(得分:3)
运行时错误13
Application.Average
是后期约束,其行为类似于工作表函数AVERAGE
,即,当结果无法显示时,通过返回错误值被评估。由于无法将错误值强制转换为Double
,因此分配失败,并出现类型不匹配错误。
您可以将结果捕获到Variant
中,检查它是否是错误值,然后 then 分配给Double
;使用IsError
函数执行此操作:
Dim avgResult As Variant
avgResult = Application.Average(...)
If Not IsError(avgResult) Then
rngAverage = avgResult
'rngAverage is safe to use as a Double
Else
' avgResult is a #VALUE! error. what now?
End If
运行时错误1004,如果我使用Application.WorksheetFunction.Average
这是因为WorksheetFunction.Average
是早期绑定,并且以VBA惯用的方式处理错误:而不是返回 Error
值,它抛出一个运行时错误,然后可以使用常规的On Error
语句和错误处理子例程来处理它。
Average
函数正在返回/抛出错误,因为给出的输入无效或包含错误-即,如果您在该数据上使用了AVERAGE
工作表函数,则不会Double
的结果之一。修正数据。