Ошибки кода VBA Excel, если между диапазоном еще - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь написать простой код VBA, который требует ввода пользователем числа от -9 до +9.Когда пользователь вводит число, код извлекает данные из определенных столбцов, относящихся к вводимому номеру, с одного листа на новый лист.У меня есть записанный код, но у меня проблема с функцией If Else.Я получаю сообщение об ошибке «Ошибка компиляции: синтаксическая ошибка».Если я избавлюсь от функции Else, код прекрасно работает для всего, что больше или равно 0, но мне нужно иметь возможность извлекать данные, относящиеся к отрицательным входам.Разве я не должен использовать If Else для этого кода?

Sub AA()
On Error Resume Next
er = Sheets("D2").Range("AA65536").End(xlUp).Row
ec = Range("IV1").End(xlToLeft).Column
r = 3
Range("A3:IV65536").ClearContents
For i = 504 To er
 a = Sheets("D2").Cells(i, "AA")
If WorksheetFunction.IsErr(a) Then a = 0
If a >= Cells(2, 1).Value Then
    For j = 2 To ec
        f = Cells(1, j)
        Cells(r, j) = Sheets("D2").Cells(i, f)
    Next j
    r = r + 1

Else a < Cells(2, 1).Value Then
    For j = 2 To ec
        f = Cells(1, j)
        Cells(r, j) = Sheets("D2").Cells(i, f)
    Next j
    r = r + 1
End If
Next i
End Sub

Ответы [ 3 ]

3 голосов
/ 04 апреля 2019

Заменить

Else a < Cells(2, 1).Value Then

на:

Else
1 голос
/ 04 апреля 2019

Использование:

  1. Option Explicit - Помогает вам объявить все переменные
  2. Использовать Иначе a <Ячейки (2, 1). Значение </em> вместо Иначе а <Ячейки (2, 1). Значение </em> ИЛИ просто замените Else a <Ячейки (2, 1). Значение </em> на Остальное

  3. Переменные, относящиеся к последней строке или последнему столбцу, объявляют как длинную

  4. Нет необходимости использовать При ошибке Resume Next

  5. Если вы хотите циклический диапазон, используйте * для каждого * или * Для i = от 1 до *

Рекомендации по коду:

Option Explicit

Sub Test()

    Dim LastRow As Long, LastColumn As Long, Row As Long, Column As Long
    Dim cell As Range, rng As Range

    With ThisWorkbook.Worksheets("Sheet1") '<- Set the worksheet you want to use

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<- Find last row of column A sheet1
        LastColumn = .Cells(7, .Columns.Count).End(xlToLeft).Column '<- Find last column of row 7 sheet1

        Set rng = .Range("A1:A" & LastRow) '<- Set range

        'Method 1
        For Each cell In rng
            If cell.Value = 1 Then
            ElseIf cell.Value = 2 Then
            End If
        Next cell

        'Method 2
        For Row = 2 To LastRow '<- Loop from row 2 to last row
            For Column = 1 To LastColumn '<- Loop from column 1 to last column
            Next Column
        Next Row

    End With

End Sub
0 голосов
/ 04 апреля 2019

Вы пытались избавиться от Else и просто использовать другое If заявление?Также я бы избавился от On Error Resume Next, особенно если вы все еще тестируете свой код.

Sub AA()
On Error Resume Next
er = Sheets("D2").Range("AA65536").End(xlUp).Row
ec = Range("IV1").End(xlToLeft).Column
r = 3
Range("A3:IV65536").ClearContents
For i = 504 To er
 a = Sheets("D2").Cells(i, "AA")
If WorksheetFunction.IsErr(a) Then a = 0
If a >= Cells(2, 1).Value Then
    For j = 2 To ec
        f = Cells(1, j)
        Cells(r, j) = Sheets("D2").Cells(i, f)
    Next j
    r = r + 1
End if

If a < Cells(2, 1).Value Then
    For j = 2 To ec
        f = Cells(1, j)
        Cells(r, j) = Sheets("D2").Cells(i, f)
    Next j
    r = r + 1
End If
Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...