2014-01-22 6 views
0

Я написал код VBA, который смотрит на столбец, находит следующую ячейку в этом столбце, которая содержит данные, и устанавливает ячейки между ними как диапазон. Это было первоначально написано для книги Excel 2003. И, конечно же, эта же команда не работает для книги 2007 года и выше. Может ли кто-нибудь помочь перевести это на 2010 Excel VBA.VBA for Excel 2007 и выше

Вот исходный код:

Dim first As Integer 
Dim Last As Integer 
Dim i As Integer 
Dim n As Integer 

n = Worksheets("Sheet1").Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count - 2 
Range("A3").Select 

For i = 1 To n 
    first = (ActiveCell.Row + 1) 
    Selection.End(xlDown).Select 
    Last = (ActiveCell.Row - 1) 
    Range("J" & first & ":J" & Last).Select 
    Selection.Value = "=J$" & (first - 1) 
    Range("A" & Last + 1).Select 
Next i 

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

Спасибо заранее.

+0

Этот код не работает, что вы думаете. Можете ли вы показать некоторые примеры данных и выборки? –

+0

Я попробую сорнить его. Это часть гораздо большего Макро. Поскольку я это делаю, позвольте мне объяснить немного лучше, что он делает: – SASUSMC

+0

Позвольте мне объяснить немного лучше, что он делает: Начните с ячейки A3. Назначьте ячейку ниже A3 (A4) переменной First. Переместитесь к следующей ячейке в столбце A, содержащей информацию, затем выполните резервное копирование в 1 строку. Назначьте номер строки переменной First. В столбце J-select-J (первый): J (последний). В каждой из этих клеток значение ячейки равно J (First). – SASUSMC

ответ

0
Sub GoDownList() 
Dim first As Integer 
Dim Last As Integer 
Dim i As Integer 
Dim n As Integer 

first = Range("A3").Row 
Last = Range("A3").End(xlDown).Row 
Range("J" & first & ":J" & Last).Value = "=J$" & (first - 1) 

Do 
    first = Range("A" & Last).End(xlDown).Row 
    Last = Range("A" & first).End(xlDown).Row 
    Range("J" & first & ":J" & Last).Value = "=J$" & (first - 1) 
    If Range("A" & Last).End(xlDown).Row > 1000000 Then 
     Exit Do 
    End If 
Loop 
End Sub 

Я думаю, что ваш код не работает, потому что вы использовали Selection.Value вместо Selection.Formula.

+0

Спасибо, я нашел проблему - она ​​не находится в коде, который находится в загрузке отчета. Когда мы загружаем отчет в формате .XLSX (это отчет SSRS), по какой-то причине пустые ячейки не отображаются как пустые ячейки. Только для теста я запустил Goto Special-Blanks, и ничего не было подсвечено. Мне пришлось обмануть его, чтобы увидеть, что в столбце есть пробелы. Помимо этого, код работает отлично. Он также отлично работает в форматах 2003 года. Спасибо за вашу помощь. – SASUSMC

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