重新显示以前的用户表单

RE-show previous Userform

我有一系列按顺序 运行 的用户表单,我需要一个可以重新显示以前的用户表单的按钮,我已经尝试了下面的代码,但它给出了一个错误告诉我此用户表单已经显示,我对如何完成此操作一无所知,这是代码:

Private Sub RETORNAR_Click()

Unload Me

' ETAPA_01 is the previous userform

ETAPA_01.Show

End Sub

很难从您提供的代码片段中确定您现有代码可能存在的问题。

我已经创建了两种方法来提供您想要的效果,尽管我怀疑混合使用会提供最令人满意的解决方案。

我创建了一个新工作簿,并在其中创建了六个用户表单:frmTest01frmTest06。在每个表单上,我创建了两个命令按钮,分别命名为 cmdBackcmdForward。我保存了工作簿并创建了两个副本。

对于版本A,窗体之间的切换由窗体外部的宏处理。每个用户表单的代码是:

Option Explicit
Private Sub cmdBack_Click()
  Direction = -1
  Unload Me
End Sub
Private Sub cmdForward_Click()
  Direction = 1
  Unload Me
End Sub

也就是说,两个退出例程在设置一个全局变量 Direction 以指示用户是要返回上一个表单还是前进到下一个表单后卸载它们的表单。所有的复杂性都在调用宏中,它是:

Option Explicit
  Public Direction As Long
Sub CtrlForms()

  Dim FormCrnt As Long

  FormCrnt = 0

  Do While True

    Select Case FormCrnt
      Case 0
        FormCrnt = FormCrnt + 1
        Load frmTest01
        frmTest01.Show
      Case 1
        If Direction = 1 Then
          FormCrnt = FormCrnt + 1
          Load frmTest02
          frmTest02.Show
        Else
          Exit Sub
        End If
      Case 2
        If Direction = 1 Then
          FormCrnt = FormCrnt + 1
          Load frmTest03
          frmTest03.Show
        Else
          FormCrnt = FormCrnt - 1
          Load frmTest01
          frmTest01.Show
        End If
      Case 3
        If Direction = 1 Then
          FormCrnt = FormCrnt + 1
          Load frmTest04
          frmTest04.Show
        Else
          FormCrnt = FormCrnt - 1
          Load frmTest02
          frmTest02.Show
        End If
      Case 4
        If Direction = 1 Then
          FormCrnt = FormCrnt + 1
          Load frmTest05
          frmTest05.Show
        Else
          FormCrnt = FormCrnt - 1
          Load frmTest03
          frmTest03.Show
        End If
      Case 5
        If Direction = 1 Then
          FormCrnt = FormCrnt + 1
          Load frmTest06
          frmTest06.Show
        Else
          FormCrnt = FormCrnt - 1
          Load frmTest04
          frmTest04.Show
        End If
      Case 6
        If Direction = 1 Then
          Exit Sub
        Else
          FormCrnt = FormCrnt - 1
          Load frmTest05
          frmTest05.Show
        End If
    End Select

  Loop

End Sub

frmTest01 的方向 -1 和 frmTest06 的方向 +1,导致退出宏。在所有其他情况下,将加载并显示适当的用户表单。

对于方法 B,复杂性在于用户表单。这里的调用宏是:

Option Explicit
Sub CtrlForms()

  Load frmTest01
  Load frmTest02
  Load frmTest03
  Load frmTest04
  Load frmTest05
  Load frmTest06

  frmTest01.Show

  Unload frmTest01
  Unload frmTest02
  Unload frmTest03
  Unload frmTest04
  Unload frmTest05
  Unload frmTest06

End Sub

也就是这个宏只负责加载和卸载表格,显示第一个

每个表格的代码:

frmUser01

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
End Sub
Private Sub cmdForward_Click()
  Me.Hide
  frmTest02.Show
End Sub

frmUser02

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
  frmTest01.Show
End Sub
Private Sub cmdForward_Click()
  Me.Hide
  frmTest03.Show
End Sub

frmUser03

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
  frmTest02.Show
End Sub
Private Sub cmdForward_Click()
  Me.Hide
  frmTest04.Show
End Sub

frmUser04

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
  frmTest03.Show
End Sub
Private Sub cmdForward_Click()
  Me.Hide
  frmTest05.Show
End Sub

frmUser05

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
  frmTest04.Show
End Sub
Private Sub cmdForward_Click()
  Me.Hide
  frmTest06.Show
End Sub

frmUser06

Option Explicit
Private Sub cmdBack_Click()
  Me.Hide
  frmTest05.Show
End Sub
Private Sub cmdForward_Click()
   Me.Hide
End Sub

frmTest01 返回和从 frmTest06 前进隐藏它们的表单并返回控制宏。所有其他人都隐藏他们的表格并显示下一个表格。

这两种方法都能提供您所寻求的控制权。

我怀疑最好的方法是在开始时加载所有表单并在结束时卸载所有表单,隐藏旧表单并显示新表单而不是在处理过程中卸载和加载。我更喜欢本地化流量控制,所以我会使用方法 A 中的 Select 语句但没有负载。