2017-02-09 7 views
0

У меня есть код, который хорошо работает при переходе к следующему столбцу на основе введенного кода, только когда он добирается до столбца 13, мне нужно, чтобы он начинался с последней строки и возвращался назад , Кто-нибудь может мне помочь?Код Excel VBA для выбора определенного столбца

Dim lastrow As Long  
If Target.Column > 2 Then 
    lastrow = Range("A17").Value 
    'lastrow = Me.Cells(Me.Rows.Count, "B").End(xlDown).Row 
    If Target.Column Mod 2 = 1 Then 
     If Target.Row >= lastrow Then   
      Me.Cells(Target.Row, Target.Column + 1).Select 
     Else    
      Me.Cells(Target.Row + 1, Target.Column).Select 
     End If 
    Else  
     If Target.Row = 3 Then  
      Me.Cells(Target.Row, Target.Column + 1).Select 
     Else   
      Me.Cells(Target.Row - 1, Target.Column).Select 
     End If 
    End If 
End If 
+0

вы можете разработать не уверен, что вы имеете в виду –

+0

может быть, вам нужно xlUp вместо xlDown 'lastrow = Me.Cells (Me.Rows.Count, "B"). End (xlUp) .Row' – Slai

+0

Это находится в электронной таблице Excel. Он отлично работает с функцией Column MOD, но нужно, чтобы он поднялся на колонке 13. Надеюсь, что это имеет больше смысла. –

ответ

1

Кажется, что проблема с вашим утверждением:

If Target.Column Mod 2 = 1 Then 

Я считаю, что вы ищете оператор модуля для Excel VBA «\». Попробуйте это:

If (Target.Column\2) = 1 Then 

За свой комментарий, попробуйте добавить этот код в колонке 13:

If Target.Column = 13 Then 
'<your code here' 

Это должно сделать трюк.

Кроме того, вы можете использовать функцию смещения. Синтаксис: .Range (""). (RowOffset, ColumnOffset). Это позволяет вам компенсировать фиксированную позицию.

См полностью отредактированный код ниже:

If Target.Column > 2 Then 
lastrow = Range("A17").Value 
'lastrow = Me.Cells(Me.Rows.Count, "B").End(xlDown).Row 
If Target.Column Mod 2 = 1 Then 
    If Target.Row >= lastrow Then   
     Me.Cells(Target.Row, Target.Column + 1).Select 
    Else    
     Me.Cells(Target.Row + 1, Target.Column).Select 
    End If 
ElseIf Target.Column = 13 Then 
    ' I am assuming the code below is what you need 
    ' this would start at your last row and work it's way up 
    Me.Cells(lastrow, Target.Column).Select 
    For i = lastrow to 1 Step - 1 ' replace 1 with however far up you want it to go 
     Me.Cells(i, Target.Column).Select 
    Next 
Else  
    If Target.Row = 3 Then  
     Me.Cells(Target.Row, Target.Column + 1).Select 
    Else   
     Me.Cells(Target.Row - 1, Target.Column).Select 
    End If 
End If 
End If 
+0

Благодарим вас за ввод. Позвольте мне попытаться выяснить, что я ищу. Код работает нормально. На самом деле никаких проблем. Я просто хочу добавить в код что-то вроде If target.Column Mod 2 = 1 или Target.Column <> 13 Тогда это сработает? –

+0

Я не понимаю, почему это не сработает на основе кода. Пока Target.Column устанавливается правильно, вы должны иметь возможность вернуть значение .Column (позиция индекса) и использовать этот номер по мере необходимости. Я также очень рекомендую просто попробовать его самостоятельно, и если что-то не работает, попытайтесь понять, почему он не работает. VBA, к счастью, очень простой язык для изучения. Вы можете много узнать о том, как это работает, пытаясь (и терпя неудачу), но выясняя, где вы поступили не так. –

+0

ОК, спасибо Брэндон. Я сделал много попыток, используя предоставленный мной код. Я пробовал свой код, и он работает, как работает мой код. Они оба работают, чтобы курсор поднимался на четные строки и опускался на нечетные строки. Проблема или добавление, которое я пытался, заключалось в том, что когда он добрался до столбца 13, я хочу, чтобы курсор двигался другим способом, я пробовал несколько вещей, и я просто не могу понять это. Спасибо за помощь! –

Смежные вопросы