2014-01-16 42 views
0

有人可以让我知道如何在一行中写下面两组代码(每组代码)吗?将多行VBA代码压缩并合并到一行

newb.sheets("Sheet1").Cells.EntireColumn.AutoFit 
    newb.sheets("Sheet2").Cells.EntireColumn.AutoFit 
    newb.sheets("Sheet3").Cells.EntireColumn.AutoFit 
    newb.sheets("Sheet4").Cells.EntireColumn.AutoFit 

    LastRow1 = sheets("Sheet1").Range("A1000000").End(xlUp).Row 
    LastRow2 = sheets("Sheet2").Range("A1000000").End(xlUp).Row 
    LastRow3 = sheets("Sheet3").Range("A1000000").End(xlUp).Row 
    LastRow4 = sheets("Sheet4").Range("A1000000").End(xlUp).Row 
+0

为什么它需要在一条线上?并且功能/子呼叫计为一条线吗? –

+0

因为我有28张工作簿。所以会有28行代码。因此,我正在寻找一种减少线数的最佳方法。我只是想成为一个最好,最聪明的程序员。 – vbalearner

+0

也许你应该为了清晰起见添加这个问题,尽管@SivaCharan和simpLEMAn似乎明白它...... :) –

回答

1

简单,你可以做使用For循环

For i = 1 To 4 
    newb.sheets("Sheet" & i).Cells.EntireColumn.AutoFit 
    LastRow1 = sheets("Sheet" & i).Range("A1000000").End(xlUp).Row 
Next i 

这里,4代表张

在其他方式的数量,你可以用得到的总张数ThisWorkbook.Worksheets.Count

For i = 1 To ThisWorkbook.Worksheets.Count 
    newb.sheets("Sheet" & i).Cells.EntireColumn.AutoFit 
    LastRow & i = sheets("Sheet" & i).Range("A1000000").End(xlUp).Row 
Next i 
+0

太棒了。感谢代码:) – vbalearner

+0

第二个更有帮助。再次感谢:) – vbalearner

+0

这将每次覆盖LastRow1。而不是只为最后的所有表单返回lastrow。 – user2140261

2

你也可以这样做:

Dim LastRow() As Long 
Dim i As Integer 
For i = 1 To ThisWorkbook.Worksheets.Count 
    With ThisWorkbook.Worksheets(i) 
     ReDim Preserve LastRow(i-1) 
     LastRow(i-1) = .Range("A" & .Rows.Count).End(xlUp).Row 
     .Cells.EntireColumn.AutoFit 
    End With 
Next i