从用户窗体使用Sheets.Add时,新工作表“连接”到另一个工作表?

从用户窗体向工作簿添加新工作表时遇到问题。 基本上每当我添加一个新的工作表,它似乎链接到同一工作簿中的另一个工作表。

我已经能够通过创build一个新的Excel文件,相当容易地重现这个问题,然后添加一个新的用户窗体中的代码:

Private Sub UserForm_Click() Sheets.Add Call Unload(Me) End Sub 

如果我从这个表单打开用户表单:

在这里输入图像描述

然后,我双击用户表单,问题已经发生。

新表格工作不正确。 例如,如果我在新工作表的任何单元格上写入,我会从原始工作表中获取格式。 更糟糕的是,如果原始页面被保护,我不允许在新页面上写入(尽pipefunction区显示它不受保护)。

在这里输入图像说明

如果我select另一张纸,再次select新的纸,一切都恢复正常。 难道我做错了什么? 如果这是一个错误是否有任何解决方法?

以下是导致错误的Excel文件: Drive.google.com

在Userform1的属性中,将ShowModal更改为False。

我能够重新产生这种行为。 我将ShowModal更改为False,并将行为更改为预期的行为。 我没有改变任何VBA代码。

我从MS Office Professional运行64位Excel 2013。

这是一个很好的,从来没有见过这样的事情。

我能够复制你的错误,并提出一个解决方法,但它可能不完全是你在找什么。

我注意到,在testing中,如果你运行macros,select原始图纸,然后重新select新创build的图纸,格式将恢复正常(如您在问题中所述)。 所以我join了Sheets(2).Select到你的私人小组的末尾。 然后,当我select新的表格,这是正常的格式。

我也尝试过Sheets(2).Select然后selectSheets(1).Select ,但它不起作用( Sheets(1)是新创build的表格)。

非常奇怪的问题! 希望这会对你有用(可能需要调整Sheets(2)以匹配原始表格的名称或位置),并且在原始表格上结束是可以的。

 Private Sub UserForm_Click() Sheets.Add Call Unload(Me) Sheets(2).Select End Sub 

以上的工作假设你在工作簿中只有一个工作表,这就是“Click Me”button的位置。

我想,它以某种方式与ShowModal属性连接,可能是一些错误。

解决方法

添加UserForm2,将其ShowModal属性设置为false ,编辑代码。

UserForm1代码:

 Private Sub UserForm_Click() Unload Me End Sub Private Sub UserForm_Terminate() UserForm2.Show End Sub 

UserForm2的代码:

 Private Sub UserForm_Activate() Sheets.Add Unload Me End End Sub 

这个想法是:closures旧的用户窗体,做一个新的将添加一个工作表。


编辑#1

随意下载工作示例,并尝试一下。


更简单的方法?

我还注意到,当userForm1终止时,Module1中的代码继续运行。 那么为什么不只是在那里添加新表? 代码为module1将是:

 Sub ShowForm() UserForm1.Show Sheets.Add End Sub 

和UserForm1的代码:

 Private Sub UserForm_Click() Unload Me End Sub 

尽pipe这不会影响Excel 2010,但请尝试这种不同的方法。

注意:如果仍然发生,您可能需要增加时间。

在您的用户窗体中,添加:

 Option Explicit Private Sub UserForm_Click() AddWorksheetTask 1 ' invokes task to Delay 1 second Unload Me End Sub 

然后在一个正常的模块中,添加:

 Option Explicit Sub AddWorksheetTask(Seconds As Integer) Application.OnTime Now + TimeSerial(0, 0, Seconds), "AddWorkSheet" End Sub Sub AddWorksheet() If UserForm1.Visible Then ' <-- Change to your Form name AddWorksheetTask 1 ' Reschedule task for next second Else Sheets.Add End If End Sub