vba - 将值从一个用户窗体移动到另一个(变量)用户窗体
问题描述
我已经根据我的需要(网站和原始文件)调整了 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
解决方案
要检查用户窗体是否已加载(又名可见),您可以使用此函数:
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
至于在表单之间传递信息,我会使用公共变量。
推荐阅读
- javascript - 矩形类没有明显显示在画布上
- angular - 如何将应用环境变量用于 Firebase Cloud Functions?
- php - 作曲家的一些问题
- rest - Google FIT Rest API 获取自动跟踪
- javascript - AngularJS将输入值推送到数组并显示它
- python - Python:输出顺序
- ruby-on-rails - RSpec - JSON 文本必须至少包含两个八位字节
- html5-canvas - Haxe 在画布上画线
- jquery - 平滑滚动适用于导航栏,但不适用于其他元素(箭头等)
- python - type(number) == (float or int) 返回 false python