Оператор For Loop VBA Excel 2016

Соответствие правильного синтаксиса, а если нет - пусто

Мне нужна помощь в создании оператора цикла, который определит начало и конец диапазона, где удовлетворяются определенные критерии.

Я нашел эти утверждения в Интернете, и мне нужна помощь, чтобы изменить их, чтобы перебрать два разных листа для обновления значения на одном из листов.

У этого есть проблема с возвратом значения True или False для диапазона, когда я хочу передать фактический именованный диапазон для поиска, где это поле = Y, а затем возвращает значение из другого столбца. Я изначально пробовал использовать Match, а If не пустая функция. Но это очень ограничивает.

См. Предыдущий пост, чтобы узнать, чего я пытаюсь достичь - я знаю, что мне нужно будет расширить образцы кода и, возможно, потребуется помощь с этой модификацией.

    Sub Test3()
 Dim x As Integer
  Dim nName As String

    Sheets("BalanceSheet").Select
 nName = Range("qryDifference[[Validate Adjustment]]").Select
  Debug.Print nName
  ' Set numrows = number of rows of data.
  NumRows = Range(nName, Range(nName).End(xlDown)).Rows.Count
  ' Select cell a1.
  ' Establish "For" loop to loop "numrows" number of times.
  For x = 1 To NumRows
     ' Insert your code here.
        MsgBox "Value found in cell " & ActiveCell.Address

     ' Selects cell down 1 row from active cell.
     ActiveCell.Offset(1, 0).Select
  Next

Конец подписки

Это то, что у меня есть до сих пор - это вызывает у меня проблему с ActiveCell.Offset (4, 0) .Select nAgentNo = Range ("qryDifference [[agtno]]"). Value nValidate = Range ("ryDifference [[Difference]] ] "). Значение Debug.Print nAgentNo Debug.Print nValidate Ошибка несоответствия типа в приведенном выше.

 Sub Revised_AgentAmount()
 Dim myRange As Range
 Dim i As Long, j As Long
 Dim nAgentNo As String
 Dim nValidate As Long

 Sheets("BalanceSheet").Select

 Set myRange = Range("qryDifference[[Validate Adjustment]]")
 For i = 1 To myRange.Rows.Count
  For j = 1 To myRange.Columns.Count
     If myRange(i, j).Value = "Y" Then
        ActiveCell.Offset(4, 0).Select
        nAgentNo = Range("qryDifference[[agtno]]").Value
        nValidate = Range("ryDifference[[Difference]]").Value
        Debug.Print nAgentNo
        Debug.Print nValidate
     End If
  Next j
 Next i
End Sub

person Karen Schaefer    schedule 23.06.2016    source источник


Ответы (2)


В своем первом операторе вы объявляете nName как String, а затем пытаетесь выбрать его. Вам нужно будет объявить его как Range, если вы собираетесь использовать его как объект Range.

person Darrell H    schedule 23.06.2016
comment
Пожалуйста, посмотрите мою последнюю редакцию моего сообщения. - person Karen Schaefer; 23.06.2016

Я нашел решение в другом месте с помощью оператора if вместо цикла for.

=IF([@agtno]=B24,[@[agt_amt]],SUMPRODUCT((Balance!$B$2:$B$7=[@agtno])*(Balance!$F$2:$F$7="Y")*Balance!$E$2:$E$7)+[@[agt_amt]])
person Karen Schaefer    schedule 23.06.2016