2015-02-23 27 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