Невозможно ввести оператор If при циклическом просмотре массивов - PullRequest
0 голосов
/ 16 апреля 2020

Новичок в массивах, и после того, как все массивы String у меня окончательно разобрались, я не могу обнаружить ошибку, которая мешает мне ввести оператор if. Из-за этого я не могу установить значение для моего массива целых чисел. Код ниже:

Dim Task() As String

Dim stringchain As String

Dim TaskNum As Integer

Set SearchRange = Range("B2", Range("B2").End(xlDown))

Task() = Split(stringchain, "|")

TaskNum = UBound(Task) - LBound(Task) - 1 'equals 32

'Setting intial TotalSample array to zero

Dim TotalSamples() As Integer

ReDim TotalSamples(0 To TaskNum)

Dim zzz As Integer

For zzz = 0 To zzz <= TaskNum

TotalSamples(zzz) = 0

Next zzz

'Counting Total samples for each task and setting value in excel

For Each cel In SearchRange

'MsgBox InStr(1, cel, Task(iii)) > 0

Dim iii As Integer

For iii = 0 To iii <= TaskNum

MsgBox InStr(1, cel, Task(iii))

'Never seems to enter if statement on next line, even when tested true

If InStr(1, cel, Task(iii)) > 0 Then

        TotalSamples(iii) = TotalSamples(iii) + cel.Offset(0, 1).Value

        Range("K4").Offset(iii, 0).Value = TotalSamples(iii)

        MsgBox "here"

        End If

Next iii

Next cel

'Output for any TotalSamples() is zero.

1 Ответ

0 голосов
/ 16 апреля 2020

Похоже, что ОП является новым для VBA, поэтому перед комментариями к коду мы должны обсудить 4 вещи. Эти четыре вещи очень важны для начинающего VBA'ера, поскольку они значительно облегчают написание кода VBA.

  1. Всегда, всегда, всегда указывайте опцию в начале каждый модуль / класс / форма.

  2. Используйте F1. Если навести курсор на ключевое слово в IDE VBA и нажать клавишу F1, откроется страница справки MS для этого ключевого слова. Если вы выделите строку, выделенную желтым цветом, она платит за это для каждого ключевого слова в этой желтой строке.

  3. Всегда компилируйте код перед тем, как запускать его. В VBA Ide используйте Debug.Project Compile для перехвата logi c и синтаксических ошибок, которые не были обнаружены явным параметром.

  4. Установите fantasti c и бесплатное дополнение VBA Rubberduck . Среди множества своих талантов Rubberduck проведет более строгий анализ вашего кода и расскажет вам о предположениях, о которых вы даже не подозревали.

Теперь о коде.

Обычно в VBA Integer конвертируется в Long внутри, поэтому нет смысла объявлять переменные как Integer, а не long.

Для l oop - For = to

Итак

For zzz = 0 To zzz <= TaskNum

должно быть записано

For zzz = 0 To Tasknum

В исходной версии zzz <= Tasknum рассматривается как логическое выражение, результат которого будет приведен к -1 или 0. Таким образом, OP код, по сути, говорит: </p>

For zzz = 0 to -1

и, следовательно, циклы For никогда не будут выполняться.

Старайтесь использовать значимые имена переменных и особенно избегайте имен, которые по сути дублируют ключевые слова. например, myCell предпочтительнее, чем cel.

Всегда квалифицируйте ключевые слова Range, Cell с Workbook.Worksheet, к которому они принадлежат. Без такой квалификации вы ссылаетесь на активный лист, который может измениться без предупреждения и, следовательно, вызвать странные ошибки.

...