将值从一个UserForm移至另一个(可变)UserForm

时间:2018-10-04 06:03:07

标签: excel vba excel-vba

我已经使Eric Bentzen日期选择器适应了我的需要(website and original file),现在我正尝试将其用于两个不同的UserForm,但尝试避免添加两个单独的按钮来移动输入的日期。

始终打开第一个UserForm(将其称为ApplicationUF)或第二个UserForm(将其称为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

1 个答案:

答案 0 :(得分:1)

要检查是否已加载UserForm(又名可见),可以使用此功能:

public static double average(double[] arr) {
    double sum = 0.0;
    for (int = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum / arr.length;
}

用法示例:

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

关于在表单之间传递信息,我将使用public variables