VBA超奇怪子

我已经在Excel中创build了这个简单的发票控制工作表,并使用VBA来更容易地显示和添加新项目。 我制作了许多其他VBA编程的工作表,他们都有一个“新”活动xbutton,编程就像这样:

Private Sub ButtNew2_Click() Dim Guia As Worksheet Dim UltLin As Integer Set Guia = Workbooks("Notas Fiscais.xlsm").Worksheets("Saída") UltLin = Guia.UsedRange.Rows.Count + 1 Guia.Application.Goto Reference:="R" & UltLin & "C1" FormNotasSaida.Show FormNotasSaida.BoxDataEmiss.SetFocus End Sub 

就那么简单。 只需select第一个空行,以便表单加载空白。 在任何其他工作簿中都可以正常工作。 但在这一个,如果和每次我点击这个button,closures窗体后,下一次(也只有一次)我再次以任何可能的方式(双击一个项目,按下“显示”button或再次按下“新build”button),它会加载空白或显示上次启动的项目(如果是这样的话)。

closures它后,我可以随时点击或按“显示”button,只要它们一直有效,就可以正常工作。 在按下“新build”button之后,问题只发生一次。

我可能做错了什么,特别是知道这个方法在所有其他工作簿中都完美的工作?

 FormNotasSaida.Show FormNotasSaida.BoxDataEmiss.SetFocus 

表单是一种特殊的具有devise者和预先声明的ID属性的类模块。 这个“预先标识的ID”就是这样玩的:你正在使用/重用类的默认全局实例 ,除非你用控制盒中的Xbuttonclosures它,否则永远不会unload它,所以你总是显示相同的forms。

最好的做法是每次使用时创build一个新的表单实例:

 Set frm = New FormNotasSaida frm.Show frm.BoxDataEmiss.SetFocus