2015-02-23 57 views
0

我正在尝试使用this userform获取日期,但我不知道如何将其设置为默认显示(始终为18/08/2012),但我不知道如何真正让它通过选定的日期到当前的子。使用自定义日历表格的输出

我找不到在线提及的博客。

Sub Macro1() 
    UserForm1.TextBox1.Text = Date 
    UserForm1.Show 
    ActiveCell.Value = UserForm1.TextBox1.Value 
End Sub 

我想用上面的代码来测试它。

+0

请提供'UserForm'链接或代码。 – L42 2015-02-23 22:07:36

+0

对不起!已添加 – Cassiopeia 2015-02-24 22:22:31

+0

为您写了一个解决方案。您可以试试它,或者您可以简单地检查Trevor发布的自定义内容,并将其添加到您获得的链接中。没有测试过,所以取决于你。 – L42 2015-02-25 05:11:02

回答

1

在你的GenerateCal Sub在底部添加这两(2)行。
这些代码行将初始化所述控件的值。

CommandButton45.Caption = Format(.Range("A1").Value, "mmm - yyyy") 
TextBox1.Text = DateSerial(Val(Format(CommandButton45.Caption, "YYYY")), _ 
    Val(Format(CommandButton45.Caption, "MM")), 1) 

然后这条线发生变化:

.Range("a1").Value = Application.Text(dt, "mmmm yyyy") 

到这一行:

.Range("a1").Value = Application.Text(StartDay, "mmmm yyyy") 

dt是字符串类型,因此它会产生不同的结果。

我也相信,明确总是更好,所以我建议你在GenerateCal Sub上加上这个声明。

Dim StartDay As Date, FinalDay As Date 
Dim DayOfWeek As Integer, CurYear As Integer, CurMonth As Integer, x As Integer 
Dim Cell As Range 
Dim RowCell As Long, ColCell As Long 

下一个问题是删除由UserForm_Initialize子产生的临时表。看来你不能删除一个不可见的表单(我使用XL2013,我不确定它是否对其他版本是真的)。所以,你需要改变它有点像:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
' On Error Resume Next 
    Application.DisplayAlerts = False 
    With ws 
     .Visible = xlSheetVisible 
     .Delete 
    End With 
    Application.DisplayAlerts = True 
' On Error GoTo 0 
End Sub 

注意,我删除了OERNOEG0因为我不认为有这个必要。

最后,要清理它,你需要在属性窗口中清除CommandButton45TextBox1的手动输入标题。将所有更改正确合并后,您应该在Userform1中获得正确的日期。

附加:

您正确访问的TextBox1值。但是我建议编辑这个代码,如果你想通过某处。

'~~> Ok Button 
Private Sub CommandButton53_Click() 
    MsgBox TextBox1.Text 
End Sub 

样品:

Private Sub CommandButton53_Click() 
    ActiveCell.Value = TextBox1.Value 
End Sub 
+0

这似乎已经做了伎俩,谢谢! – Cassiopeia 2015-02-25 16:02:09