Возникли проблемы с вызовом функций в VBA для Excel - PullRequest
0 голосов
/ 20 мая 2019

Краткое описание проблемы:

  • Есть 3 столбца данных.
    • Шаг № (столбец A),
    • Испытания и процедуры (столбец C),
    • и Pass или Fail (столбец F).
  • Тесты и процедуры содержат 3 типа ячеек, которые сгруппированы в иерархию, где сверху вниз идут супер-тесты, суб-тесты и процедуры.
  • В супер- или суб-тесте может быть несколько процедур, а в супер-тесте может быть несколько или вообще нет никаких суб-тестов. Супер-тесты показаны желтым цветом фона, суб-тесты показаны стилем ячейки «Примечание».
  • Столбец Step # отсчитывается после каждой процедуры, вспомогательные и супер-тесты не учитываются, и число непрерывно от теста к тесту. Пропуск или неудача имеет 3 возможных входа.
  • «Пропустить», «F» для сбоя, «NE» для неисполненного. Эти данные заполняются для каждой процедуры.

Входные данные в столбцах Pass или Fail для каждого Super и Sub-test вводятся вручную, я хотел бы автоматизировать это с помощью макроса. Он будет действовать как AND гейт, где тест пройден только в том случае, если все процедуры и под-тесты под ним пройдены.

Если присутствует «F», то этот суб-тест и, следовательно, супер-тест не пройден. Если присутствует «NE», то этот суб-тест и, следовательно, супер-тест не выполняется. «F» превзойдет «NE», поэтому тест, содержащий оба, будет неудачным.

Что я пробовал: Я подумал о том, чтобы сначала взглянуть на цвета фона и стили ячеек, так как это был бы верный способ узнать, какую строку нужно заполнить. Я не смог ничего собрать воедино с этой идеей.


Чтобы решить эту проблему, я пытаюсь разбить его на два макроса: один, чтобы найти первый набор пробелов и заполнить пробелы в суб-тесте, а второй - заполнить остальные. Первый макрос найдет пустое пространство с заполненным пространством под ним. В этой ситуации каждый пробел, который необходимо заполнить, имеет место под ним. Как только пространство будет найдено, оно будет проходить через цикл, добавляя все значения ячеек в массив, пока не будет найдено другое пустое пространство. Однажды найденный вызовет функции, чтобы найти конкретные символы в массиве, а затем поместит этот символ, который необходимо найти в уже отслеживаемой ячейке, которую необходимо заполнить. В идеале вы должны запустить этот и аналогичный макрос, чтобы выяснить супер *.-тестов 1033 *

Sub Subtests()
    Dim rng As Range, cel As Range
    Dim TrackedCel As Range
    Dim Subtests As Long
    Dim arr() As Variant
    Subtests = 0
    For Each cel In rng
        If IsEmpty(ActiveCell) = True And IsEmpty(ActiveCell.Offset(1, 0)) = False Then
            Subtests = Subtests + 1
            TrackedCel = cel
            ActiveCell.Offset(1, 0).Select
            Do Until IsEmpty(ActiveCell)
                ReDim Preserve arr(1 To UBound(arr) + 1) As Variant
                arr(UBound(arr)) = a.Value
            Loop
            'Call FIsInArray(valToBeFOund, arr) As Boolean'
            If IsInArray = True Then
                TrackedCel.Value = InputBox("F")
            End If
            Call NEIsInArray
            If IsInArray = True Then
                TrackedCel.Value = InputBox("NE")
            End If
            Call PIsInArray
            If IsInArray = True Then
                TrackedCel.Value = InputBox("P")
            End If
        End If
    Next cel
End Sub


Function FIsInArray(valToBeFound As Variant, arr As Variant) 
As Boolean
    Dim F As Variant
    For Each element In arr
        If F = valToBeFound Then
            IsInArray = True
            Exit Function
        End If
    Next element
Exit Function
End Function

Function PIsInArray(valToBeFound As Variant, arr As Variant) 
As Boolean
    Dim P As Variant
    For Each element In arr
        If P = valToBeFound Then
            IsInArray = True
            Exit Function
        End If
    Next element
Exit Function
End Function

Function NEIsInArray(valToBeFound As Variant, arr As Variant) 
As Boolean
    Dim NE As Variant
    For Each element In arr
        If NE = valToBeFound Then
            IsInArray = True
            Exit Function
        End If
    Next element
Exit Function
End Function

Данные таблицы

Требуемый выход

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