使用VBA自动调整行

时间:2012-02-15 11:27:43

标签: excel excel-vba vba

我正在尝试在A2到AA2范围内执行AutoFit单元格。

以下是我正在尝试的代码:

Application.ScreenUpdating = False
Dim wkSt As String
Dim wkBk As Worksheet
wkSt = ActiveSheet.Name
For Each wkBk In ActiveWorkbook.Worksheets
    On Error Resume Next
    wkBk.Activate
    Cells.Range("A2:AA2").EntireColumn.AutoFit
Next wkBk
Sheets(wkSt).Select
Application.ScreenUpdating = True

以下是一些示例Excel数据,如屏幕上显示:

     A            B           C
1    Jhon is the best employee
2    Emp_Name     Emp_id      Empsal.

请注意,“Jhon是最好的员工”全部在一个单元格(A1)中,但在显示时,其内容重叠单元格B1和C1。

使用上面的代码,数据显示如下:

     A                               B       C
1    Jhon is the best employee
2    Emp_Name                        Emp_id  Empsal

如何在每个工作表的第二行的每个单元格上执行AutoFit?上面的代码无法从我的第二行自动调整数据。

这就是我希望显示器看起来像:

     A        B      C
1    Jhon is the best employee
2    Emp_Name Emp_id Empsal.

即。列应该贴合“Emp_Name”,“Emp_id”和“Empsal”。 - 不是“Jhon是最好的员工”。

编辑此外,如果以下行(3,4等)中有数据,则这些数据也应包含在自动调整中。例如,数据应如下所示:

     A          B      C
1    Jhon is the best employee
2    Emp_Name   Emp_id Empsal.
3    Jhon Peter 2      2000

2 个答案:

答案 0 :(得分:5)

如果您想要的是强制Autofit忽略第一行,并且只根据第2行及更高行的内容自动调整。我不认为这是可能的。 一种方法是存储第一行的内容,删除它,自动调整并插入第一行的内容:

Public Sub test()

  Dim wkSt As String
  Dim wkBk As Worksheet
  Dim temp As Variant

  wkSt = ActiveSheet.Name
  For Each wkBk In ActiveWorkbook.Worksheets
      On Error Resume Next
      wkBk.Activate
      temp = wkBk.Rows(1)
      wkBk.Rows(1).ClearContents
      wkBk.Columns("A:AA").AutoFit
      wkBk.Rows(1) = temp
  Next wkBk
  Sheets(wkSt).Select

End Sub

答案 1 :(得分:3)

而不是在EntireColumn上执行自动调整,而是在Columns上执行。

wkBk.Range("A2:AA2").Columns.AutoFit

查看AutoFit的VBA帮助......

编辑您现在不仅要为第2行执行自动调整,还要对3,4,5等执行自动调整。这只需要一个简单的修改:

wkBk.Range("A2:AA999").Columns.AutoFit

以上假设行999是您要自动配置数据的最后一行。您还可以将所有行一直包含在表格底部,如下所示:

wkBk.Range(Range("A2"), Cells(wkBk.Rows.Count, "AA")).Columns.AutoFit

这足以让你走上正轨。