我从这个问题开始编写代码。 我正在修改代码,将所选日期发送到单元格,并在发生这种情况时关闭日历。 我问了一个上一个问题这个代码并合并了那些似乎有效的更改。
当我第一次启动日历时,底部的日期遵循此设置(yyyy/mm/dd):
选择日期后,日期格式变为dd/mm/yyyy。
将日期(选定的日历框)发送到 label6 的代码在哪里?
现在我正在从 label6.caption 中提取选定的日期。 这感觉高度依赖于 dd/mm/yy、yy/mm/dd、mm/dd/yy 的区域设置。 我宁愿将日期值传递给变量,然后尝试从字符串中提取它。
PickedDate = Label6.Caption
在 frmCalendar 代码中,我发现了这段代码,尽管阅读了但我仍不理解:
frmCalendar 代码片段:
Public Property Let ShortDateFormat(s As String)
SdtFormat = s
Label6.Caption = Format(Date, SdtFormat)
End Function
Public Property Get ShortDateFormat() As String
ShortDateFormat = SdtFormat
End Property
让我对上面的内容感到困惑的是,我认为
Date
是今天日期的内置函数而不是变量。 这是我发现 Label6.Caption
被赋值的唯一一行。 我期待一些变量而不是 Date
以及选择单元格时设置的变量。
frmCalendar 代码片段,这是我对事情发生地点的最佳猜测。
Private Sub UserForm_Initialize()
With CbLanguage
.AddItem "EN"
.AddItem "GER"
.AddItem "SPA"
.AddItem "ITL"
.AddItem "FRE"
.ListIndex = 0
End With
'~~> Hide the Title Bar
HideTitleBar Me
Me.Caltheme = Venom
Me.LongDateFormat = "dddd mmmm dd, yyyy"
Me.ShortDateFormat = "dd/mm/yyyy"
'~~> Create a command button control array so that
'~~> when we press escape, we can unload the userform
Dim CBCtl As Control
i = 0
For Each CBCtl In Me.Controls
If TypeOf CBCtl Is MSForms.CommandButton Then
i = i + 1
ReDim Preserve CBArray(1 To i)
Set CBArray(i).CommandButtonEvents = CBCtl
End If
Next CBCtl
Set CBCtl = Nothing
'~~> Set the Time
StartTimer
curDate = Date
thisDay = Day(Date): thisMonth = Month(Date): thisYear = Year(Date)
CurYear = Year(Date): CurMonth = Month(Date)
'~~> Populate this months calendar
PopulateCalendar curDate
End Sub
我从中提取 frmCalendar 的堆栈溢出问题指出代码太长,无法发布,所以我避免这样做。 如果我应该查找并发布特定的代码部分,请告诉我,我会更新。
我也是1992年3月4日左右从Turbo Pascal来的。 所以,我感觉到你了。
至于你的问题,将 selected_date 分配给 Label6 位于所附屏幕截图中突出显示的位置。 要找到它们,您可以按 Ctrl+F 搜索“Label6.Caption”(不包括引号),然后选择搜索下的当前项目选项按钮。
以下屏幕截图是单击✔按钮时将所选日期最终分配给Label6.Caption的部分。 这可能对您抑制单击按钮时弹出消息框并根据需要将所选日期值分配给特定单元格/变量有用。
在下面的屏幕截图中,突出显示的代码是每当单击每天的按钮时都会发生对标签标题的分配的位置。
这不是要编辑以获得最终选定日期分配的代码部分。
这部分只是为了保持所选日期字段的更新(仅供您参考,因为它会在您搜索时显示)。但如果没有这部分,msgbox 语句将需要一个单独的变量。
可以更换
MsgBox Label6.Caption, vbInformation, "Date selected"
与
PickedDate = Label6.Caption
如果您想将 selected_date 值存储到您提到的变量中。
此代码包含类模块并使用用户窗体作为类,这对于当前的您来说可能有点高级。
在您在最初的问题中提到的问题中,michaelf的最后一个回答,在该帖子的底部提到了日历。
我多次使用过那个。
它没有 API 调用。您现在使用的这个有一些残留影响。所以我不推荐这个。
至于您对 Property Let & Get 不了解的部分,在 useform 模块中找到的部分正在被 userform-as-a-class 使用,因为这有点将 userform 变量封装在 userform 类中。
Let 或多或少相当于只分配一个像
Let selected_date="30Sept2024"
这样的变量,你实际上可以在任何地方这样写(不仅仅是在类中。selected_date=frmCalendar.selected_date
。