日期格式在excel vba中不起作用

日期格式在excel vba中不起作用,excel,date-formatting,vba,Excel,Date Formatting,Vba,我在挑选约会对象方面遇到了一些困难。StartDate和EndDate是来自DatePicker和Debug的值。Print将显示“mm/dd/yyyy”。我正在尝试将日期格式更改为“dd/mmm/yyyy”,以便能够将其与MS access中的数据进行比较。但它不起作用 Sub cmdSubmit_Click() Dim StartDate As Date, EndDate As Date StartDate = DTPickStart.Value ' 6/11/201

我在挑选约会对象方面遇到了一些困难。StartDate和EndDate是来自DatePicker和Debug的值。Print将显示“mm/dd/yyyy”。我正在尝试将日期格式更改为“dd/mmm/yyyy”,以便能够将其与MS access中的数据进行比较。但它不起作用

Sub cmdSubmit_Click()
    Dim StartDate As Date, EndDate As Date

    StartDate = DTPickStart.Value    ' 6/11/2018
    EndDate = DTPickEnd.Value        ' 6/24/2018

    StartDate = Format(StartDate, "dd/mmm/yyyy")
    EndDate = Format(EndDate, "dd/mmm/yyyy")

    Debug.Print StartDate           ' gave me 6/11/2018 instead of 11/Jun/2018
    Debug.Print EndDate
End Sub
对我在这里做错了什么有什么建议吗


提前谢谢

格式可能会以您想要的格式返回日期,但随后会将其转换为日期值,然后以系统的默认格式打印。要以您想要的格式存储它们,您可以尝试以下方法:

Option Explicit

Sub cmdSubmit_Click()
    Dim StartDate As Date, EndDate As Date
    Dim s1 As String, s2 As String

    StartDate = #6/11/2018#
    EndDate = #6/24/2018#

    'StartDate = Format(StartDate, "dd/mmm/yyyy")
    'EndDate = Format(EndDate, "dd/mmm/yyyy")

    s1 = Format(StartDate, "dd/mmm/yyyy")
    s2 = Format(EndDate, "dd/mmm/yyyy")

    Debug.Print StartDate & " - " & s1          ' gave me 6/11/2018 instead of 11/Jun/2018
    Debug.Print EndDate & " - " & s2
End Sub
或者,如果希望将它们作为日期保存在单元格中,可以将写入它们的范围的
NumberFormat
设置为所需的格式:

Sheet1.Range("A1") = StartDate
Sheet1.Range("A2") = EndDate
Sheet1.Range("A1:A2").NumberFormat = "dd.mmm.yyyy"

如果需要在VBA中设置日期格式,则有2个选项:

  • 更改区域设置
  • 写入Excel,在其中设置格式,并将
    。文本

  • 根据Application.International(Index)方法返回有关当前国家/地区和国际设置的信息

    当您将索引作为xlDateOrder应用时

    0 = month-day-year
    1 = day-month-year
    2 = year-month-day
    
    因此,我们将使用此属性覆盖系统行为。当Excel VBA项目跨具有各种单独区域设置的地理位置使用时,这尤其有用

    下面,我对您的代码进行了一个小小的修改。Format函数返回字符串,但您将其指定给导致此问题的日期

    Sub cmdSubmit_Click()
        Dim StartDate As Date, EndDate As Date
        Dim strStartDate as String, strEndDate as String
    
        StartDate = DTPickStart.Value    ' 6/11/2018
        EndDate = DTPickEnd.Value        ' 6/24/2018
    
        strStartDate = Format(StartDate, "dd/mmm/yyyy")
        strEndDate = Format(EndDate, "dd/mmm/yyyy")
    
        Debug.Print StartDate           ' It will give 11/Jun/2018
        Debug.Print EndDate
    End Sub
    

    谢谢大家。我设法找到了答案,但我投了Jainashih一票,因为这更接近于我如何使用结果查询access数据库。

    这是Excel中的一个已知问题。通常,它与系统的区域设置有关。默认情况下,Excel从中选择日期。检查您的区域设置,那里的日期格式是mm/dd/yyyy。@Jainashih,我的短日期区域设置确实是M/d/yyy,但我无法更改区域设置,因为文件必须共享给多个用户。谢谢您是否尝试过Application.International(xlDateOrder)获取最终用户日期格式,然后相应地处理日期?
    Sub cmdSubmit_Click()
        Dim StartDate As Date, EndDate As Date
        Dim strStartDate as String, strEndDate as String
    
        StartDate = DTPickStart.Value    ' 6/11/2018
        EndDate = DTPickEnd.Value        ' 6/24/2018
    
        strStartDate = Format(StartDate, "dd/mmm/yyyy")
        strEndDate = Format(EndDate, "dd/mmm/yyyy")
    
        Debug.Print StartDate           ' It will give 11/Jun/2018
        Debug.Print EndDate
    End Sub