2016-01-27 28 views
0

我想複製使用VBA作爲一個新的工作表被複制活動工作表下面的Excel複印紙上

現在我使用此代碼和它的作品,但把複製的片末的紙張以下紙張片材的列表的

Dim x As Integer 

x = InputBox("Enter number of times to copy sheet, puts copies at end of sheet list") 
For numtimes = 1 To x 
    'Loop by using x as the index number to make x number copies. 
    ActiveWorkbook.ActiveSheet.Copy _ 
     After:=Sheets(Sheets.Count) 

Next 

比方說片的列表是 - 片(1),片材(2),表(3),表(4) 如果我運行上表的代碼(2)我希望新副本位於Sheet(2)和Sheet(3)之間,這是否可以通過?

此外,如果我取消彈出框要求的紙張副本數它得到錯誤有沒有辦法阻止發生?

+1

只要'後:=表(表(2))',不是嗎?或者實際上,如果你在多張紙上運行(並且沒有變量),「After:= Sheets(Activesheet.index)」應該可以工作。 – BruceWayne

+0

After:=工作表(Activesheet.index)工作。 – luke

回答

0

您可以使用activesheet的索引:After:=Sheets(Activesheet.Index)

不知道您是否知道很多VBA,但正如其名稱所暗示的,無論您當前活動的工作表是什麼,該索引都將被使用。不知道更多的代碼,它將適用於您在此處詢問的特定實例。但是如果你有多個工作表(你這樣做),你可能會想爲你工作的工作表設置一個變量,然後在Sheets()部分使用它。

Sub t() 
Dim x As Integer 
Dim myWorksheet As Worksheet 

myWorksheet = Sheets("Data Sheet") 
x = InputBox("Enter number of times to copy sheet, puts copies at end of sheet list") 
For numtimes = 1 To x 
    'Loop by using x as the index number to make x number copies. 
    myWorksheet.Copy _ 
     After:=Sheets(myWorksheet.Index) 
Next 
End Sub 

現在,這只是使用一個工作表。你需要添加一些邏輯來循環遍歷所有的內容,但是這對你不知道如何去做並不難。如果您需要更多幫助,請告訴我。

2

此外,如果我取消彈出框,要求紙張副本的數量,它會得到錯誤是有辦法阻止發生?

x的類型更改爲Variant。如果您在輸入框上單擊取消,則會返回空字符串,該字符串不適用於Integer

相關問題