2017-03-09 167 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