在Excel VBA中设置多列的列宽

在Excel VBA中设置多列的列宽,excel,vba,Excel,Vba,Jeeped和CLR好心地提供了代码,在复制C列的边框和公式的同时,向名为sht02AnalysisSummary的工作表中添加了可变数量的列,该工作表从D列开始 AddCol = txtNrEvaluated With sht02AnalysisSummary Set rangeCopy = .Range(.Cells(3, "C"), .Cells(.Rows.Count, "C").End(xlUp)) rangeCopy.Copy Destination:=.Cells

Jeeped和CLR好心地提供了代码,在复制C列的边框和公式的同时,向名为sht02AnalysisSummary的工作表中添加了可变数量的列,该工作表从D列开始

AddCol = txtNrEvaluated

With sht02AnalysisSummary
    Set rangeCopy = .Range(.Cells(3, "C"), .Cells(.Rows.Count, "C").End(xlUp))
    rangeCopy.Copy Destination:=.Cells(3, .Columns.Count).End(xlToLeft).Offset(0, 1).Resize(rangeCopy.Rows.Count, AddCol)
End With
然而,该代码在宽度方面并没有复制C列的格式,尽管我已经用带有End with的
尝试了
EntireClumn.ColumnWidth=15
,甚至它自己的
带有End with的
,但我没有成功


任何帮助都将不胜感激。

在您的问题下面进一步阐述我的意见


只有在跨整个列和nor范围复制时,才会跨列复制列宽。此外,
rng.ColumnWidth=15
也可以工作

这就是你想要的吗

Dim rangeCopy As Range, destRng As Range

AddCol = 2

With sht02AnalysisSummary
    Set rangeCopy = .Range(.Cells(3, "C"), .Cells(.Rows.Count, "C").End(xlUp))
    Set destRng = .Cells(3, .Columns.Count).End(xlToLeft).Offset(0, 1).Resize(rangeCopy.Rows.Count, AddCol)
    rangeCopy.Copy destRng
    destRng.ColumnWidth = 15
End With
屏幕截图


如果要将源选项卡的C列宽度复制到新列,可以使用:

Dim rangeCopy As Range, rangePaste As Range
Dim Addcol As Integer

Addcol = NrEvaluated

With sht02AnalysisSummary

    Set rangeCopy = .Range(.Cells(3, "C"), .Cells(.Rows.Count, "C").End(xlUp))
    Set rangePaste = .Cells(3, .Columns.Count).End(xlToLeft).Offset(0, 1).Resize(rangeCopy.Rows.Count, Addcol)

    rangeCopy.Copy Destination:=rangePaste
    rangePaste.EntireColumn.ColumnWidth = rangeCopy.EntireColumn.ColumnWidth

End With

列宽仅在跨整列和nor范围复制时才会跨列复制:)
rng.ColumnWidth=15
应该更适合您的情况。。。这应该可以工作
.Cells(3,.Columns.Count).End(xlToLeft).Offset(0,1).Resize(rangeCopy.Rows.Count,AddCol).ColumnWidth=15
我确实在开始时尝试了ColumnWdth=15,但它调整了读取AddCol信息的页面上的列宽。然而,我不知道为什么。它给了我一个错误5:无效的过程调用或参数。我正在使用Excel 2010,但不明白这是为什么。我在发布之前测试了代码:)。我假设
AddCol=1
它是变量。它通常在2到7的范围内,但如果使用这些值,它也可能达到20%。直到为我工作。请稍等,更新上面答案中的屏幕截图否,我很高兴您的解决方案确定列宽为15。工作表页面必须处理总计不超过9900万英镑(小数点后2位)的数据,因此15的宽度是完美的。啊,我尝试设置了rangePaste,但从未计算出最后一行。我也会记得那个。非常感谢。