重新显示以前的用户表单
RE-show previous Userform
我有一系列按顺序 运行 的用户表单,我需要一个可以重新显示以前的用户表单的按钮,我已经尝试了下面的代码,但它给出了一个错误告诉我此用户表单已经显示,我对如何完成此操作一无所知,这是代码:
Private Sub RETORNAR_Click()
Unload Me
' ETAPA_01 is the previous userform
ETAPA_01.Show
End Sub
很难从您提供的代码片段中确定您现有代码可能存在的问题。
我已经创建了两种方法来提供您想要的效果,尽管我怀疑混合使用会提供最令人满意的解决方案。
我创建了一个新工作簿,并在其中创建了六个用户表单: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
语句但没有负载。
我有一系列按顺序 运行 的用户表单,我需要一个可以重新显示以前的用户表单的按钮,我已经尝试了下面的代码,但它给出了一个错误告诉我此用户表单已经显示,我对如何完成此操作一无所知,这是代码:
Private Sub RETORNAR_Click()
Unload Me
' ETAPA_01 is the previous userform
ETAPA_01.Show
End Sub
很难从您提供的代码片段中确定您现有代码可能存在的问题。
我已经创建了两种方法来提供您想要的效果,尽管我怀疑混合使用会提供最令人满意的解决方案。
我创建了一个新工作簿,并在其中创建了六个用户表单: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
语句但没有负载。