Почему я получаю сообщение об ошибке во время выполнения при переходе к следующему рабочему листу, даже если код правильно выполнен для первого рабочего листа? - PullRequest
0 голосов
/ 31 октября 2018

Я дошел до того, что в моем коде хорошо задаваемые вопросы Google просто больше мне не помогают. У меня есть два цикла For в моем коде. Они выполняются правильно для первого рабочего листа, который я установил в цикле в моей рабочей книге. Однако переход к следующему рабочему листу приводит к ошибке времени выполнения:

  • ошибка времени выполнения 13, если я использую Application.Average
  • ошибка времени выполнения 1004, если я использую Application.WorksheetFunction.Average

Что я пытаюсь сделать:
У меня есть данные из измерений. Они организованы в разных рабочих листах для разных температурных диапазонов. Я хочу пройтись по соответствующим столбцам в соответствующих таблицах в моих данных, чтобы найти средние значения этих столбцов. В конце я хотел бы сохранить средние значения в моем первом рабочем листе для соответствующих заголовков. (Я еще не написал код для этой последней части.)

Любая помощь очень ценится.

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

1 Ответ

0 голосов
/ 31 октября 2018
  • ошибка времени выполнения 13, если я использую Application.Average

    Application.Average равно с поздним связыванием и ведет себя как функция листа AVERAGE, т. Е. возвращает значение ошибки, когда результат не может быть оценен. Поскольку значение ошибки не может быть приведено к Double, назначение завершается ошибкой с несоответствием типов ошибка.

    Вы можете записать результат в Variant, проверить, не является ли это значением ошибки, затем присвоить 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 или. Исправьте данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...