2013-12-19 61 views
0

我已经编写了此代码以合并每列中的几行,从列C到AZ。Excel中的范围VBA

出于某种原因,该范围不匹配,一个我期待,在这种情况下,代码合并单元格C8:C10,然后D8:D12,E8:E12,等等。在这个例子中线= 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不是很熟悉),作为变量的单词列工作正常。我理解的是,制作一个清洁的代码,并将研究Siddaharth解决方案来学习一些东西。我昨天做了它的工作,但我有更多的东西要添加和更干净的代码一定会帮助我!谢谢! – GAS