为什么我的VBA代码在运行时会创build一个额外的表单?

我的代码完美的工作,除了它创build一个额外的工作表(无论是在下一个顺序…即“Sheet2”..“Sheet3”…每次我运行它能帮助找出为什么会发生这种情况? 。应该只有两个表格创build,我已经在下面的代码中指出:

Sub CopySheet() Dim NewSheet As String Dim PrevSheet As String Dim CashWS As Worksheet Dim MonthVal As String NewSheet = InputBox("Which month is this Commissions statement for?") PrevSheet = InputBox("What was the previous month?") Worksheets(PrevSheet).Copy After:=Worksheets("Summary") ActiveSheet.Name = NewSheet Range("D2").Select ActiveCell.FormulaR1C1 = "=EOMONTH(DATE(2017,MONTH(DATEVALUE(MID(CELL(""filename"", RC[-5]), FIND(""]"", CELL(""filename"", RC[-5])) + 1, 255)&""1"")+1),1),0)" Selection.NumberFormat = "m/d/yyyy" Range("D3").Select ActiveCell.FormulaR1C1 = "=MONTH(R[-1]C)" Range("D3").Select Selection.NumberFormat = "General" MonthVal = ActiveCell.Value Set CashWS = Sheets.Add Sheets.Add.Name = "2017_0" & MonthVal & " Cash" End Sub 

这是发生在最后一步:

 Set CashWS = Sheets.Add Sheets.Add.Name = "2017_0" & MonthVal & " Cash" 

将其更改为:

 Set CashWS = Sheets.Add CashWS.Name = "2017_0" & MonthVal & " Cash" 

执行第二个Sheet.Add.Name添加一个工作表并同时对其进行重命名。 当你Set CashWS = Sheets.Add ,Excel添加表单。 那么,只需使用您的WSvariables并更新名称即可。

编辑:没有真正的原因,我会补充说,如果你偏爱使用Sheets.Add.Name...你可以这样做:

 Sheets.Add.Name = "2017_0" & MonthVal & " Cash" Set CashWS = ActiveSheet 

然后继续使用CashWSvariables。