日期格式在 excel vba 中不起作用
Date Format not working in excel vba
我在选择日期选择器时遇到了一些困难。 StartDate 和 EndDate 是 DatePicker 的值,Debug.Print 会给我 "mm/dd/yyyy"。我正在尝试将日期格式更改为 "dd/mmm/yyyy",以便我能够将它与我从 MS 访问中获得的数据进行比较。但是没用。
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
关于我在这里做错了什么有什么建议吗?
提前致谢!
可能 returns 以您想要的格式格式化日期,但随后会将其转换为日期值,然后以系统的默认格式打印。要以您想要的格式存储它们,您可以尝试类似的方法:
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,在那里格式化并带上
.Text
:
Option Explicit
Sub TestMe()
Dim StartDate As Date
StartDate = #6/11/2018#
Cells(1, 1) = StartDate
Cells(1, 1).NumberFormat = "DD/MMM/YYYY"
Debug.Print Cells(1, 1).Text '11.Jun.2018
End Sub
根据 MSDN Application.International(索引)方法 returns 有关当前 country/region 和国际设置的信息。
当您将索引应用为 xlDateOrder 时
0 = month-day-year
1 = day-month-year
2 = year-month-day
因此,我们将使用此 属性 来覆盖系统行为。当 Excel-VBA 项目用于具有不同区域设置的不同地区时,这尤其有用。
下面,我将对您的代码进行一些小的调整。格式化函数 returns 字符串,但您将其分配给导致此问题的日期。
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
谢谢大家。我设法弄明白了,但我投票给了 jainashish,因为它更接近我如何使用结果来查询我的访问数据库。
我在选择日期选择器时遇到了一些困难。 StartDate 和 EndDate 是 DatePicker 的值,Debug.Print 会给我 "mm/dd/yyyy"。我正在尝试将日期格式更改为 "dd/mmm/yyyy",以便我能够将它与我从 MS 访问中获得的数据进行比较。但是没用。
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
关于我在这里做错了什么有什么建议吗?
提前致谢!
可能 returns 以您想要的格式格式化日期,但随后会将其转换为日期值,然后以系统的默认格式打印。要以您想要的格式存储它们,您可以尝试类似的方法:
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,在那里格式化并带上
.Text
:
Option Explicit
Sub TestMe()
Dim StartDate As Date
StartDate = #6/11/2018#
Cells(1, 1) = StartDate
Cells(1, 1).NumberFormat = "DD/MMM/YYYY"
Debug.Print Cells(1, 1).Text '11.Jun.2018
End Sub
根据 MSDN Application.International(索引)方法 returns 有关当前 country/region 和国际设置的信息。
当您将索引应用为 xlDateOrder 时
0 = month-day-year
1 = day-month-year
2 = year-month-day
因此,我们将使用此 属性 来覆盖系统行为。当 Excel-VBA 项目用于具有不同区域设置的不同地区时,这尤其有用。
下面,我将对您的代码进行一些小的调整。格式化函数 returns 字符串,但您将其分配给导致此问题的日期。
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
谢谢大家。我设法弄明白了,但我投票给了 jainashish,因为它更接近我如何使用结果来查询我的访问数据库。