选定的日期是如何传递到标签的?

问题描述 投票:0回答:1

我从这个问题开始编写代码。 我正在修改代码,将所选日期发送到单元格,并在发生这种情况时关闭日历。 我问了一个上一个问题这个代码并合并了那些似乎有效的更改。

当我第一次启动日历时,底部的日期遵循此设置(yyyy/mm/dd):

enter image description here

选择日期后,日期格式变为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 的堆栈溢出问题指出代码太长,无法发布,所以我避免这样做。 如果我应该查找并发布特定的代码部分,请告诉我,我会更新。

excel vba forms
1个回答
0
投票

我也是1992年3月4日左右从Turbo Pascal来的。 所以,我感觉到你了。

至于你的问题,将 selected_date 分配给 Label6 位于所附屏幕截图中突出显示的位置。 要找到它们,您可以按 Ctrl+F 搜索“Label6.Caption”(不包括引号),然后选择搜索下的当前项目选项按钮。

以下屏幕截图是单击✔按钮时将所选日期最终分配给Label6.Caption的部分。 这可能对您抑制单击按钮时弹出消息框并根据需要将所选日期值分配给特定单元格/变量有用。 final selected date assignment


在下面的屏幕截图中,突出显示的代码是每当单击每天的按钮时都会发生对标签标题的分配的位置。 这不是要编辑以获得最终选定日期分配的代码部分。
这部分只是为了保持所选日期字段的更新(仅供您参考,因为它会在您搜索时显示)。但如果没有这部分,msgbox 语句将需要一个单独的变量。 updating selected date if and when each day was clicked

可以更换

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"
这样的变量,你实际上可以在任何地方这样写(不仅仅是在类中。
Get 就像从类中获取值(在本例中是定义的用户窗体类),如
selected_date=frmCalendar.selected_date

Property Get 和 Property Let 作为类似的工具,用于在类模块中输入和输出,以便类内部的数据从调用代码中封装起来,在普通代码模块中通常不使用/不需要。
欢迎询问我更多。

© www.soinside.com 2019 - 2024. All rights reserved.