我有一系列将按顺序运行的用户表单,我需要一个可以重新显示以前用户表单的按钮,我已经尝试了下面的代码,但是它给出了一个错误,告诉我这个用户表单已经显示,我对如何完成这件事毫无头绪,这是代码:
Private Sub RETORNAR_Click()
Unload Me
' ETAPA_01 is the previous userform
ETAPA_01.Show
End Sub
答案 0 :(得分:1)
很难从您提供的代码段中找出现有代码可能出现的问题。
虽然我怀疑混合物会给出最满意的解决方案,但我已经创造了两种方法来提供您所寻求的效果。
我创建了一个新工作簿,并在其中创建了六个用户表单:frmTest01
到frmTest06
。在每个表单上,我创建了两个名为cmdBack
和cmdForward
的命令按钮。我保存了工作簿并创建了两个副本。
对于版本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
语句但没有负载。