2016-11-16 63 views
2

我对VBA相对来说比较新,而且我需要一些帮助来编写我一直在写的代码。目前,它看起来像这样:VBA日期保留为美国版

Sub RoundedRectangle1_Click() 
Selection.NumberFormat = "dd mmm yy" 
Range("H2").ClearContents 
Dim Date1 As ValueChange 
Range("H2").Value = InputBox("Enter the first date (Monday) of the week you wish to view, in the format DD/MM") 
End Sub 

正如你所看到的,我已经为用户手动输入日期的弹出框,但出于某种原因,一旦这个进入它不断提供一个答案美国格式,例如如果我输入04/12,这将显示为“04年4月12日”,而不是“04年12月4日”

+0

为什么不使用[日期选择器?(http://stackoverflow.com/questions/13409653/how-to-add-date-picker-to-vba-用户表格) – SBF

+0

写入04/12/16,它会正确显示? – Vityata

+0

@Vityata不幸的是不起作用。 – CBooth

回答

0

根据我的测试,InputBox返回string。我会做什么,是写下面的函数(只是演示,在此代码处理没有错误):

Private Function ParseDate(sInput As String) As Date 
    Dim sTmp() As String 
    sTmp = Split(sInput, "/") 

    ParseDate = DateTime.DateSerial(2016, sTmp(1), sTmp(0)) 
End Function 

,然后简单地这样称呼它:

Dim sResult As String 
sResult = InputBox("Enter the first date (Monday) of the week you wish to view, in the format DD/MM") 
Range("H2").Value = ParseDate(sResult) 
+0

可能值得用'Year(Date())'替换DateSerial中的'2016'来保留当前年份。 –

+0

当然,但这就是为什么我说这只是一个演示:) –

+0

不幸的是,没有任何运气,或者@ DarrenBartrup-Cook - 证明一个令人沮丧的任务.. – CBooth

0

这个宏,它要求对在出席者名单上印制的日期在21世纪以dd/mm/yy或dd/mm表示。可以很容易地适合于包括20%的

Sub Print_Register() 
' 
' Print_Register Macro 
Dim MeetingDate, Answer 

    Sheets("Register").Select 
    Range("A1").Select 
GetDate: 
    MeetingDate = DateValue(InputBox("Enter the date of the meeting." & Chr(13) & _ 
    "Note Format" & Chr(13) & "Format DD/MM/YY or DD/MM", "Meeting Date", , 10000, 10000)) 
    If MeetingDate = "" Then GoTo TheEnd 
    If MeetingDate < 36526 Then MeetingDate = MeetingDate + 36525 'If no yy add year 2000 
    Range("Current_Meeting_Date") = MeetingDate 
    Answer = MsgBox("Date OK?", 3) 
    If Answer = 2 Then GoTo TheEnd 
    If Answer = 7 Then GoTo GetDate 
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" 
TheEnd: 
End Sub 
相关问题