2013-12-19 261 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