从UserForm使用Sheets.Add时,新工作表是"连接"到另一个工作表?

lis*_*aro 11 excel vba excel-vba

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

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

Private Sub UserForm_Click()
    Sheets.Add
    Call Unload(Me)
End Sub
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

然后我双击userform,问题已经发生.

新工作表工作不正常.例如,如果我在新工作表的任何单元格上书写,我将从原始工作表中获取格式.更糟糕的是,如果原始工作表受到保护,我不允许在新工作表上书写(虽然功能区显示它没有受到保护).

在此输入图像描述

如果我选择另一张纸并再次选择新纸张,则一切都恢复正常.难道我做错了什么?如果它是一个错误,有任何解决方法吗?

这是一个产生错误的Excel文件:Drive.google.com

Max*_*rov 0

我认为,它以某种方式与 ShowModal 属性相关,可能是一些错误。

解决方法

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

UserForm1 的代码:

Private Sub UserForm_Click()

    Unload Me

End Sub

Private Sub UserForm_Terminate()
    UserForm2.Show
End Sub
Run Code Online (Sandbox Code Playgroud)

UserForm2 的代码:

Private Sub UserForm_Activate()
    Sheets.Add
    Unload Me
    End
End Sub
Run Code Online (Sandbox Code Playgroud)

这个想法是:关闭旧的用户窗体,创建一个将添加一张表的新用户窗体。


编辑#1

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


更简单的方法?

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

Sub ShowForm()
    UserForm1.Show
    Sheets.Add
End Sub
Run Code Online (Sandbox Code Playgroud)

UserForm1 的代码:

Private Sub UserForm_Click()
    Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)