使用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数据,如屏幕上所示:

  ABC 1 Jhon is the best employee 2 Emp_Name Emp_id Empsal. 

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

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

  ABC 1 Jhon is the best employee 2 Emp_Name Emp_id Empsal 

我怎样才能在每个工作表的第二行的每个单元格上做AutoFit? 上面的代码无法自动从我的第二行数据。

这是我想让显示看起来像:

  ABC 1 Jhon is the best employee 2 Emp_Name Emp_id Empsal. 

即列应紧贴“Emp_Name”,“Emp_id”和“Empsal”。 – 不在“Jhon是最好的员工”。

编辑另外,如果有以下行(3,4等)中的数据,那么这些也应该包含在Autofit中。 例如,数据应该显示如下:

  ABC 1 Jhon is the best employee 2 Emp_Name Emp_id Empsal. 3 Jhon Peter 2 2000 

如果你想要的是强制自动调整忽略第一行,并只根据行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 

而不是在EntireColumn上做自动调整,在Columns

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

看看VBA帮助AutoFit …

编辑你现在想要做AutoFit不仅为第2行,但也是3,4,5等。这只需要一个简单的修改:

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

上面假定999行是你最后一行,要自动填充数据。 您也可以将所有行一直包含到工作表底部,如下所示:

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

这应该足以让你走上正轨。