从用户窗体使用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