2013-12-19 4 views
0

Я написал этот код, чтобы объединить несколько строк в каждом столбце, от столбца C до AZ.Диапазон в Excel VBA

По какой-то причине диапазон не совпадает с тем, который я ожидал, в этом случае код объединяет ячейки C8: C10, затем D8: D12, E8: E12 и т. Д. lines = 2 в этом примере.

Я не понимаю, почему не соответствуют диапазону, если значение линии не изменяется внутри поля.

Спасибо!

For columns = 0 To 49 


    Range(Range("C8").Offset(0, columns), Range("C8").Offset((lines), columns)).Select 
     With Selection 
     .HorizontalAlignment = xlCenter 
     .VerticalAlignment = xlCenter 
     .WrapText = False 
     .Orientation = 90 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = True 
     End With 

next comlumns 
+0

использовать 'Option Explicit' в первую очередь, и вы увидите опечатку, которая должна быть большой частью ваших проблем. – enderland

ответ

2

Columns - зарезервированное слово. И вы сказали, что этот код действительно работает?

Если я изменяю это на допустимую переменную, тогда код запускается. Проблема заключается в том, как вы используете Смещение

?[C8].offset(2).address после того, как вы сливаться даст вам $C$12

также избежать использования .SelectINTERESTING READ И не в полной мере упомянуть квалифицироваться свои объекты. Например, ваши объекты диапазона и ячейки не имеют полной квалификации и могут дать вам ошибку.

Я думаю, это то, чего вы пытаетесь достичь?

Sub Sample() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim i As Long, rw As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    rw = 2 

    With ws 
     For i = 3 To 52 
      Set rng = .Range(.Cells(8, i), .Cells(8 + rw, i)) 

      With rng 
       .HorizontalAlignment = xlCenter 
       .VerticalAlignment = xlCenter 
       .WrapText = False 
       .Orientation = 90 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = True 
      End With 
     Next i 
    End With 
End Sub 
+0

Я не думаю, что код OP мог бы работать с прерыванием цикла For/Next (обратите внимание на орфографию на стороне 'Next') – enderland

+0

@enderland; Да, я уже заметил, что когда я его тестировал. Я не упоминал об этом, так как я, наконец, изменил проклятую оскорбительную переменную: p –

+0

Я добавил опечатку в браузере. Я забыл скопировать эту строку и вручную ее обманул. Как ни странно (я не очень хорошо знаком с VBA) слово column как переменная работает нормально. Я понимаю, хотя идея создания кода cleanr и изучит решение Siddaharth, чтобы что-то узнать. Я сделал это вчера, но у меня есть много чего добавить, и более чистый код определенно поможет мне! Благодаря! – GAS

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