自动调整数组中的列
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
但是,尝试找出最适合您的方法!
有没有办法自动调整在数组中创建的新工作簿的列宽?我已经尝试了标准 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
但是,尝试找出最适合您的方法!