2017-03-09 164 views
0

我是VBA品牌的新手,并且自己学习。我想出了一个可行的代码,但我知道在不使用Select方法的情况下,必须有更优雅的方式来编写代码。如何复制和粘贴范围,包括格式和列宽

wscount = ActiveWorkbook.Worksheets.Count 
Sheets.Add After:=Sheets(Sheets.Count) 
Worksheets(1).Select 
Range("B2:B100").Copy 
Worksheets(wscount + 1).Select 
Range("A1:A100").Select 
Selection.PasteSpecial Paste:=xlPasteColumnWidths 
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ 
     , SkipBlanks:=False, Transpose:=False 

我希望我可以在代码中获得列设置的宽度,而不是从源代码复制。

另外,有没有办法让列的宽度根据范围内的一个单元格中的“最长”文本进行更改?

无论如何,我的两个问题是:

  1. 怎么写上面的代码,而不必使用Select,并
  2. 如何设置列的宽度,所以我不从源头上复制。
+0

[如何避免使用选择和激活](http://stackoverflow.com/q/10714251/6535336)。 – YowE3K

+0

要设置列宽,请尝试使用宏录制器录制宏 - 在录制时将列的宽度设置为例如10,然后自动调整宽度。停止记录器并查看生成的宏 - 它将显示两条语句,例如'Column(“A:A”)。ColumnWidth = 10'和'Columns(“A:A”)。EntireColumn.AutoFit'。 – YowE3K

回答

1

还有更优雅的方式,但随着提供的信息,这将做伎俩。

Dim wscount as Integer 
Dim wb as Workbook 
Set wb = ActiveWorkbook 
wscount = wb.Worksheets.Count 

wb.Sheets.Add After:=wb.Sheets(wb.Sheets.Count) 
wb.Worksheets(1).Range("B2:B100").Copy 
wb.Worksheets(wscount + 1).Range("A1:A100").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ 
     , SkipBlanks:=False, Transpose:=False 
wb.Worksheets(wscount + 1).range("a1").EntireColumn.AutoFit 
+0

谢谢你太棒了! – Justme