首页 > 解决方案 > 将值从一个用户窗体移动到另一个(变量)用户窗体

问题描述

我已经根据我的需要(网站和原始文件)调整了 Eric Bentzen 日期选择器,现在我试图将它用于两个不同的用户窗体,但试图避免添加两个单独的按钮,专门用于移动输入的日期。

一直以来,它要么是第一个 UserForm(我们称之为 ApplicationUF)打开,要么是第二个(我们称之为 AnswersUF),但绝不会同时打开两者。

两种形式都有用于输入日期的文本框。我的想法是,在单击该 TextBox 日期选择器用户窗体后,用户选择日期,单击保存按钮,日期选择器用户窗体已关闭并将输入的日期移动到活动用户窗体专用日期文本框。但是我在引用活动用户窗体时遇到了麻烦。

TLDR:如何确定哪个用户窗体处于活动状态并将值从另一个用户窗体移动到它?

到目前为止我的代码:

在日期选择器用户窗体中,选择的日期变量在单独的模块中声明为公共变量 Public datFirstDay As Date

现在我正在尝试在日期选择器用户窗体中添加 on_clik 事件以保存按钮,该按钮确定活动用户窗体并移动输入的日期。到目前为止我的代码:

Private Sub cmdSave_Click()
   'I am having problem determining which use form is open
   'I figured out that syntax should probably look something like this
   'but this obviously doesent work since as far as I understand IsLoaded used only in Acces
   'how can I adapt it to excel?
If VBA.UserForms("ApplicationUF").IsLoaded = True Then
    ApplicationUF.rDateTB.Value = datFirstDay
        ElseIf VBA.UserForms("AnswersUF").IsLoaded = True Then
          AnswersUF.DateTB.Value = datFirstDay
    End If

cmdCancel_Click
End Sub

我认为这并不重要,但以防万一我添加 cmdCancel_Click 子代码。它是由 Eric Bentzen 编写的原始、未更改的代码。

Private Sub cmdCancel_Click()

Set colLabelEvent = Nothing
Set colLabels = Nothing
bSecondDate = False
sActiveDay = Empty
lFirstDay = 0
Unload Me

End Sub

标签: vbaexcel

解决方案


要检查用户窗体是否已加载(又名可见),您可以使用此函数:

Public Function formLoaded(frmName As String) As Boolean
    Dim f
    For Each f In UserForms
        Debug.Print f.Name
        If f.Name = frmName Then formLoaded = True
    Next f
End Function

示例用法:

If formLoaded("UserForm1") then Unload UserForm1

至于在表单之间传递信息,我会使用公共变量


推荐阅读