2015-06-30 3 views
0

Внутри моего макроса vba у меня есть следующий фрагмент кода, который выполняет итерацию по каждой строке и находит конкретный столбец, а если значение в этой строке = «UNGRADED», сделайте что-то ...VBA - Динамическое имя столбца - конвертировать в Cells.Value

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 'Find the final row. 
For x = 1 To FinalRow 'Iterate through the rows 

    gradedColumn = Cells(x, 14).Value ' Find the value for the row in column N. 

    If gradedColumn = "UNGRADED" Then 
    'Do something... 

Я сейчас пытаюсь изменить этот проход динамически поиска по названию столбца по имени, название будучи «градуированным/Неоцененным».

Dim gradedColumn As Range 

    FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 'Find the final row. 
    For x = 1 To FinalRow 'Iterate through the rows 

     Set gradedColumn = Range(_ 
       Range("A1:S1").Find("Graded/Ungraded").Offset(1), _ 
       Range("A1:S1").Find("Graded/Ungraded").Offset(1).End(xlDown)) 
'Find the column "Graded/Ungraded". 

     If gradedColumn = "UNGRADED" Then 
     'Do something... 

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

Обновление в соответствии с ответами. Я внесла поправки в свой код и, похоже, сейчас работает.

Set gradedColumn = Range(_ 
      Range("A1:S1").Find("Graded/Un").Offset(1), _ 
      Range("A1:S1").Find("Graded/Un").Offset(1).End(xlDown)) 

     x = 2 

     For Each mycell In gradedColumn 

     If mycell = "UNGRADED" Then 
     Cells(x, 5).Resize(1, 6).Copy 
     Sheets("SicknessRecordUngraded").Select 
     NextRow = Cells(Rows.Count, 1).End(xlUp).Row +1 
     Cells(NextRow, 1).Select ' Find the next row. 
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ 
      False, Transpose:=False 
     Sheets("SicknessRecord").Select 

End If 

    x = x + 1 
    Next mycell 

ответ

2

Это было не совсем понятно мне, что вы пытаетесь сделать с вашим диапазоном, но я думаю, что этот код будет достаточно для вас, чтобы продолжить, который даст вам адрес ячейки с градуированной/UNGRADED в форме «$ C $ 1», которую вы затем можете передать в Range, если вам это нужно/хотите.

Dim gradedColumn As Range 

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row 'Find the final row. 
For x = 1 To FinalRow 'Iterate through the rows 

    titleCell = Range("A1:S1").Find("Graded/Ungraded").Address 
    lastCellInGradedColum = Range("A1:S1").Find("Graded/Ungraded").End(xlDown).Address 

    ' do something 
Next x 

'alternatively, iterate through the cells in your range like this: 
Set gradedColumn = Range(_ 
      Range("A1:S1").Find("Graded/Ungraded").Offset(1), _ 
      Range("A1:S1").Find("Graded/Ungraded").Offset(1).End(xlDown)) 
    For Each mycell In gradedColumn 
      If mycell = "UNGRADED" Then 
      'Do something... 
    End If 
    Next mycell 
+2

'Offset' является свойством типа' Range', поэтому строка 'Set gradedColumn = ...' не является источником ошибки несоответствия типа 13. Следующая строка. – BrakNicku

+1

ah, thanks user3964075, Offset "Возвращает объект Range, который представляет диапазон, смещенный от указанного диапазона". Вы совершенно правы, и AMorton1989 пытался использовать значение диапазона ячеек, а не одну ячейку. Я отредактировал свой ответ, чтобы удалить это вводящее в заблуждение утверждение, но я думаю, что код по-прежнему является подходящим ответом на его проблему. Я также добавил в код, чтобы показать, как итерации по диапазону и выполнить проверку на каждую ячейку внутри него. – Eddy

+1

Отлично, спасибо за это. Я изменил свой код выше, что дает некоторое представление о том, чего я пытаюсь достичь. То, что вы разместили, было очень полезно. – AMorton1989

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