VBA не входит тогда заявление - PullRequest
0 голосов
/ 10 марта 2019

Этот код предназначен для просмотра диапазона ячеек и сравнения их значений с эталонными ячейками, а затем обновления определенных ячеек в зависимости от того, какая часть Excel соответствует эталонным значениям. Я получаю ошибку "Недопустимый вызов процедуры или аргумент". Когда я использую F8 для обхода своего кода, он запускается после второго оператора If.

Private Sub CommandButton1_Click()
Dim rng As Range, cell As Range
  Set rng = Range("A171:AJ171")
  For Each cell In rng
    If cell.Value = ActiveSheet.Cells(4, 4).Value Then
      If ActiveSheet.Cells((cell.Row + 1), cell.Column).Value = ActiveSheet.Cells("D3").Value Then
        ActiveSheet.Cells("M45").Value = ActiveSheet.Cells((cell.Row + 3), cell.Column).Value
        ActiveSheet.Cells("M46").Value = ActiveSheet.Cells((cell.Row + 4), cell.Column).Value
        ActiveSheet.Cells("M47").Value = ActiveSheet.Cells((cell.Row + 5), cell.Column).Value
        ActiveSheet.Cells("M48").Value = ActiveSheet.Cells((cell.Row + 6), cell.Column).Value
        ActiveSheet.Cells("M49").Value = ActiveSheet.Cells((cell.Row + 7), cell.Column).Value
        ActiveSheet.Cells("M26").Value = ActiveSheet.Cells((cell.Row + 8), cell.Column).Value
        ActiveSheet.Cells("M27").Value = ActiveSheet.Cells((cell.Row + 9), cell.Column).Value
        ActiveSheet.Cells("M28").Value = ActiveSheet.Cells((cell.Row + 10), cell.Column).Value
        ActiveSheet.Cells("M57").Value = ActiveSheet.Cells((cell.Row + 11), cell.Column).Value
        ActiveSheet.Cells("M59").Value = ActiveSheet.Cells((cell.Row + 12), cell.Column).Value
        ActiveSheet.Cells("M60").Value = ActiveSheet.Cells((cell.Row + 13), cell.Column).Value
      End If
    End If
  Next
End Sub

1 Ответ

0 голосов
/ 10 марта 2019

Попробуйте этот код:

Private Sub CommandButton1_Click()
    Dim rng As Range, cell As Range
    Dim i As Long
    Dim d4 As Variant, d3 As Variant
    d3 = Range("D3").Value
    d4 = Range("D4").Value
    ' rng starts at A171 
    Set rng = Range("A171")
    ' loop through 36 columns to AJ171
    For i = 1 To 36
        If rng.Cells(1, i).Value = d4 Then
            If rng.Cells(2, i).Value = d3 Then
                'Copy values from M45:M49 to Axxx3:Axxx7
                Range("M45").Resize(5, 1).Value = rng.Cells(3, i).Resize(5, 1).Value
                'Copy values from M26:M28 to Axxx8:Axxx10
                Range("M26").Resize(3, 1).Value = rng.Cells(8, i).Resize(3, 1).Value
                'Copy values from M57 to Axxx11
                Range("M57").Value = rng.Cells(11, i).Value
                'Copy values from M59:M60 to Axxx12:Axxx13
                Range("M59").Resize(2, 1).Value = rng.Cells(12, i).Resize(2, 1).Value
            End If
        End If
    Next i
End Sub

Некоторые заметные изменения:

  • Значение в .Cells(4,4) совпадает с .Range("D4") и сохраняется вне цикла в d4.
  • Значение в .Range("D3") аналогично сохраняется вне цикла в d3.
  • Используйте цикл For с индексом i, чтобы можно было ссылаться на ячейки в таблице под A171 с rng.Cells(row,i)
  • Сзади и напишите несколько смежных ячеек с шаблоном Range(destination).Resize(n,m).Value = Range(source).Resize(n,m).Value.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...