VBA执行Sub异常

VBA执行Sub异常,vba,excel,Vba,Excel,我在excel中制作了这个简单的发票控制工作表,并使用VBA使其更易于可视化和添加新项目。我已经制作了几十个其他VBA编程工作表,它们都有一个“新”的活动x按钮,编程方式如下: Private Sub ButtNew2_Click() Dim Guia As Worksheet Dim UltLin As Integer Set Guia = Workbooks("Notas Fiscais.xlsm").Worksheets("Saída") UltLin = Guia.UsedRange

我在excel中制作了这个简单的发票控制工作表,并使用VBA使其更易于可视化和添加新项目。我已经制作了几十个其他VBA编程工作表,它们都有一个“新”的活动x按钮,编程方式如下:

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
就这么简单。只需选择第一个空行,表单就可以加载空白。它在任何其他工作簿中都可以正常工作。但在本例中,如果每次我单击此按钮时,在关闭表单后,下一次(且仅一次)我以任何可能的方式再次加载表单(双击某个项目、按“显示”按钮或再次按“新建”按钮),它将加载空白或显示上次启动的项目(如果您这样做了)

在关闭它之后,我可以在任何地方单击,或者在任何时候按下“显示”按钮,它们都可以正常工作,就像往常一样。按下“新建”按钮后,该问题只出现一次

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

表单是一种特殊的类模块,具有设计器和预先声明的ID属性。这个“预先声明的ID”在这里起作用:您正在使用/重用该类的默认全局实例,并且[除非您使用控制框中的X按钮关闭它,]从不
卸载它,因此您总是显示相同的表单

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

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

检查您的UltLin变量,这可能在空白单元格处停止,然后转到下一行。使用生成的表单实例而不是默认实例。有关更多信息,请参阅。FWIW您没有选择“第一个空行”
Guia.UsedRange.Rows.Count+1不符合您的预期,也不可靠:。就是这样!非常感谢不,对不起。实际上没有。我编写的代码和模块中有一半停止工作=(@AlekosMazzolotti可能是因为另一个原因。如果您的代码依赖于包含某些值的默认实例,那么现在需要将
frm
对象传递给该代码。
Set frm = New FormNotasSaida
frm.Show
frm.BoxDataEmiss.SetFocus