2014-10-14 6 views
0

У меня есть следующий код, который я использую в опросе для создания x-боксов только в одном из диапазона C: H, если он установлен. Я хочу повторить его из строки, в которой этот код работает в настоящее время (строка 3) по строке 152, но я не уверен, как заставить его работать.Повторение кода Excel VBA для строк

Как бы я это сделал? Я своего рода новичок, поэтому любая помощь будет оценена по достоинству.

-Крис

Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim rInt As Range 
Dim rCell As Range 
Set rInt = Intersect(Target, Range("C3:H3")) 

If Not rInt Is Nothing Then 
    If Application.WorksheetFunction.CountA(Range("C3:H3")) > 0 Then 
     Range("C3:H3").Value = "" 
    End If 

    For Each rCell In rInt 
     If rCell.Value = "" Then 
      rCell.Value = "X" 
     ElseIf rCell.Value = "X" Then 
      rCell.Value = "" 
     End If 
    Next 
End If 

Set rInt = Nothing 
Set rCell = Nothing 
Cancel = True 

End Sub 
+1

Какую ошибку вы получаете? – BradyK

+0

Ну, ничего в коде, который я разместил. Я просто думаю, что я недостаточно совершенен. ;) Если я попытаюсь выполнить команду цикла или установить другой диапазон в диапазоне от 3 до 152, я просто не могу заставить все это работать. – Chris

+0

Вместо явного вызова вашего диапазона используйте переменные. например «Диапазон (ячейки (3, x), ячейки (7, x))», а затем вы можете вставить его внутри цикла «For» и приращения. – thunderblaster

ответ

0

Вы можете объявлять номера строк в качестве переменной, а затем использовать For цикл, например, так:

Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim rInt As Range 
Dim rCell As Range 

For rw = 3 To 152 

Set rInt = Intersect(Target, Range("C" & rw & ":H" & rw)) 

If Not rInt Is Nothing Then 
    If Application.WorksheetFunction.CountA(Range("C" & rw & ":H" & rw)) > 0 Then 
     Range("C" & rw & ":H" & rw).Value = "" 
    End If 

    For Each rCell In rInt 
     If rCell.Value = "" Then 
      rCell.Value = "X" 
     ElseIf rCell.Value = "X" Then 
      rCell.Value = "" 
     End If 
    Next 
End If 

Set rInt = Nothing 
Set rCell = Nothing 
Cancel = True 

Next 

End Sub 
+0

Это именно то, что я хотел. Спасибо! – Chris

+0

Счастливые помочь @ Крис! :) Если мой ответ сработал, проголосуйте и/или принимайте его, чтобы другие могли его увидеть. Благодаря! – Daniel

+0

Я принял его, но мой рейтинг слишком низок, чтобы его проголосовать. Еще раз спасибо! – Chris

0

Прямо сейчас вы код читает:

Если диапазон, который был выбран пересекается с C3:H3 затем, очистить содержимое C3:H3, затем через петлю, через которые когда-либо клетки в которые также были в C3:H3 и установите их в «X» (все они пусты, поэтому ваш If rcell.value = "" лишний).

Переберите C3: H152 применяя ту же логику (которая не делает много смысла, чтобы начать с), а затем изменить ваш цикл для For each rcell in Range("C3:H152")

Это будет делать что if заявление против каждой ячейки этот диапазон, только когда есть пересечение между тем, что было выбрано, и C3:H3. Я бы предположил, что вы захотите немного изменить свой код, чтобы лучше вписаться в то, что вы пытаетесь сделать.

+0

Спасибо за ваш ответ! Я ввожу ваши предложения. Вы правы в том, что моя rcell.value = "" была излишней. Спасибо, что помогли мне очистить его. Однако, когда я изменил диапазон, он просто добавил X в каждую ячейку в этом диапазоне. Я хочу, чтобы на каждом из них была одна X-строка, зависящая от конечного пользователя, нажимающего эту опцию опроса. – Chris

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