2016-06-23 7 views
0

Proper syntax Match and If not isblankДля оператора цикла VBA Excel 2016

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

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

У этого есть проблема, возвращающая значение 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 

End Sub

Это то, что я до сих пор - это дает мне и вопрос с 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 

ответ

0

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

+0

Пожалуйста, посмотрите мою последнюю редакцию на мое сообщение. –

0

Я нашел решение в другом месте с инструкцией 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]]) 
Смежные вопросы