2017-06-15 84 views
1

我的代码完美的工作,除了它创建一个额外的表格(无论是在序列中的下一个...即“Sheet2”..“Sheet3”...每次我运行它时都可以帮助弄清楚为什么会发生这种情况? ...应该只有两片创建为我在下面的代码表明:为什么我的VBA代码在运行时会创建额外的表单?

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 
+0

除了下面的答案,值得一提的是最好[避免使用'.Select' /'.Activate'](https://stackoverflow.com/questions/10714251/how-to-avoid-using - 选择功能于Excel的VBA的宏)。这将有助于缩短/“收紧”你的代码。 – BruceWayne

回答

6

它发生在最后一步:

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会添加工作表。那么,只需使用您的WS变量并更新名称即可。

编辑:并没有真正的理由,我会补充说,如果你是偏爱使用Sheets.Add.Name...你可以做:

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

然后继续与CashWS变量工作。

+1

@Jeeped你们都打败了我的评论! – YowE3K

+0

@Jeeped - 我看到了,这次我很幸运! – BruceWayne

+0

@BruceWayne非常感谢! –

相关问题