Функция My If не будет принята во внимание - PullRequest
0 голосов
/ 24 мая 2019

Макрос начинает проходить через все ячейки от N19 до C14 (слева направо).Но когда дело доходит до С19;проблема в том, что он переходит к B14, который находится за пределами таблицы.

Я попытался включить несколько операторов, таких как End IF, и подумал об использовании функции while, но, похоже, усложнил проблему.

Sub Testtask()
    Dim i As Long, j As Long
    For j = -14 To 3  
        For i = 14 To 19 
            Cells(i, -j).Select
        Next i
    Next j
End Sub

На рисунке показаны мой рабочий лист и таблица, относящаяся к вопросу:

The image shows my working sheet and the table related to in the question

1 Ответ

2 голосов
/ 24 мая 2019

Напишите код, который читается так, как вы бы это объяснили:

[...] проходя через все ячейки от N19 до C14

Вы хотите, чтобы столбцы переходили от N (14) к C (3), а для каждого столбца - от 19 до 14. Поскольку оба цикла повторяются в обратном направлении, часть, которую вы пропустили в синтаксисе цикла For (FWIW они все ключевые слова , а не функции ), это необязательный спецификатор Step, который вы хотите указать как -1.

Dim currentColumn As Long
For currentColumn = 14 To 3 Step -1
    Dim currentRow As Long
    For currentRow = 19 To 14 Step -1
        Dim currentCell As Range
        Set currentCell = Sheet1.Cells(currentRow, currentColumn)
        'interact with the currentCell here
    Next
Next

Обратите внимание, что на первый взгляд и не зная, чего вы пытаетесь достичь, на самом деле нет никаких причин возвращаться назад: вы можете перейти на currentColumn = 3 To 14 и currentRow = 14 To 19, и точно такие же ячейки будут повторяться сверху-вниз.снизу, слева направо.За кодом легче следовать, когда все происходит естественным образом: в общем, лучше избегать циклического возврата назад, если только не нужно .

Также обратите внимание, что вызов члена Cells явно квалифицирован как Worksheet объект (здесь Sheet1 - ваш пробег может отличаться);если вы действительно хотите работать с независимо от того, какой лист в данный момент активен , тогда вы можете использовать ActiveSheet в качестве классификатора и выполнить ActiveSheet.Cells(currentRow, currentColumn).

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