Vba 使用工作表时。从用户表单添加新工作表是否“连接”到其他工作表?

Vba 使用工作表时。从用户表单添加新工作表是否“连接”到其他工作表?,vba,excel,Vba,Excel,从UserForm向工作簿添加新工作表时出现问题。基本上,每当我添加新工作表时,它似乎链接到同一工作簿中的另一个工作表 通过创建一个新的Excel文件,然后添加一个包含以下代码的新用户表单,我可以相当轻松地重现此问题: Private Sub UserForm_Click() Sheets.Add Call Unload(Me) End Sub 如果我从这样的工作表中打开userform: 然后我双击用户表单,问题已经发生了 新的工作表不正确。例如,如果我在新工作表的任何单元格

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

通过创建一个新的Excel文件,然后添加一个包含以下代码的新用户表单,我可以相当轻松地重现此问题:

Private Sub UserForm_Click()
    Sheets.Add
    Call Unload(Me)
End Sub
如果我从这样的工作表中打开userform:

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

新的工作表不正确。例如,如果我在新工作表的任何单元格上写入,我将从原始工作表中获取格式。更糟糕的是,如果原始工作表受到保护,我不允许在新工作表上写字,尽管功能区显示它未受保护

如果我选择另一张工作表并再次选择新工作表,一切都会恢复正常。我做错什么了吗?如果是一个bug,有什么解决方法吗


下面是一个产生错误的Excel文件:

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

变通办法

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

UserForm1的代码:

Private Sub UserForm_Click()

    Unload Me

End Sub

Private Sub UserForm_Terminate()
    UserForm2.Show
End Sub
Private Sub UserForm_Click()
    Unload Me
End Sub
UserForm2的代码:

Private Sub UserForm_Activate()
    Sheets.Add
    Unload Me
    End
End Sub
其思想是:关闭旧的UserForm,创建一个新的UserForm,它将添加一个工作表

编辑1 请随意尝试一下

更简单的方法

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

Sub ShowForm()
    UserForm1.Show
    Sheets.Add
End Sub
UserForm1的名称和代码:

Private Sub UserForm_Click()

    Unload Me

End Sub

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

这是一个好的,从来没有见过这样的东西

我能够复制您的错误并提出解决方案,但这可能不是您想要的

我在测试中注意到,如果您运行宏,选择原始工作表,然后重新选择新创建的工作表,格式将恢复到您在问题中所述的正常状态。因此,我在Sheets2中添加了。选择到您的私人Sub的末尾。然后,当我选择新工作表时,它是正常格式

我还尝试了Sheets2.Select,然后是Sheets1.Select,但是Sheets1作为新创建的工作表不起作用

非常奇怪的问题!希望这能起作用,因为您可能需要调整图纸2以匹配原始图纸的名称或位置,并且在原始图纸上结束是可以的

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

假设您所在的工作簿只有一张工作表,这就是“单击我”按钮所在的位置。

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

我能够重新产生这种行为。 我将showmodel更改为False,行为更改为预期行为。我没有对任何VBA代码进行任何更改


我正在使用MS Office Professional运行64位Excel 2013。

虽然这不会影响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

示例文件中的问题没有出现在Excel 2010中。它发生在2013 Office Excel中,带有表单控制命令按钮和形状。使用工作表上的ActiveX控件命令按钮不会导致此问题。我可以使用xl2016复制初始格式问题-但一旦文本条目被创建,编辑模式下的黄色背景就会消失。但是,第一页保留了其他粗体文本等格式。有趣。@brettdj我看到了这个问题导致的不同行为。有时,当你在新的工作表中书写时,原来的工作表会发生变化,而有时,你不能用箭头键在单元格之间移动。我在2013年看到过这种情况。从模态窗体调用sht.Activate方法时似乎出现问题。它使sht可见但不处于活动状态。我记得唯一的解决方法是将表单按钮替换为ActiveX button.hi,遗憾的是这对我不起作用,因为我需要在宏结束时激活新创建的工作表=/。然而,我现在认为值得尝试选择一张纸,等待100毫秒,然后选择另一张。只是等待5秒钟,没有效果:@lisovacaro,我在回答中添加了更多细节。请让我知道,如果它不适合你,为什么。非常感谢。