自动调整数组中的列

Autofit Columns in an Array

有没有办法自动调整在数组中创建的新工作簿的列宽?我已经尝试了标准 ws.columns.AutoFit,但它在保存新工作簿之前不起作用。这是从一个主文件中拆分工作簿的最后一个循环。

'Loop through the array of unique field values, copy paste into new workbooks and save
For ArrayItem = 1 To UBound(ArrayOfUniqueValues)
    ws.ListObjects("Data").Range.AutoFilter Field:=ColumnHeadingInt, Criteria1:=ArrayOfUniqueValues(ArrayItem)
    ws.Range("Data[#All]").SpecialCells(xlCellTypeVisible).Copy
    ***ws.Columns.AutoFit***
    Workbooks.Add
    Range("A1").PasteSpecial xlPasteAll
    ws.Columns.AutoFit
    ActiveWorkbook.SaveAs SavePath & ArrayOfUniqueValues(ArrayItem) & Format(Now(), "text") & ".xlsx", 51
    ActiveWorkbook.Close False
    ws.ListObjects("Data").Range.AutoFilter Field:=ColumnHeadingInt
Next ArrayItem

当您使用方法 Workbooks.Add 时,会创建一个新工作簿(并成为活动工作簿),但是您的变量 'ws' 仍然引用源工作表(而不是新工作表)新工作簿上的工作表),因此 ws.columns.autofit 只会自动调整您的源列。

您可以调用新创建的工作表的自动调整:

   Range("a1").Worksheet.Columns.AutoFit

这应该可行,因为新添加的工作簿(和工作表)现在有 active/current 工作表,并且使用不带限定符的范围对象(就像您一样)指的是活动工作表。

将新变量分配给您创建和使用的不同 worksheets/workbooks 可以说是更好的做法,以避免混淆,如下所示:

   Dim wbTarget As Workbook, wsTarget As Worksheet
   Set wbTarget = Workbooks.Add
   Set wsTarget = wbTarget.Sheets(1)
   wsTarget.Range("a1") = "The value you want to set (or use PasteSpecial here)"
   wsTarget.Columns.AutoFit
   ... etc...
   set wsTarget=Nothing
   set wbTarget=Nothing

但是,尝试找出最适合您的方法!