excel - VBA 中的默认日期格式设置
问题描述
我最近在 Win 10 上更改了我的区域设置,这影响了我的 VBA 宏解释日期的方式,并且我Range.Find()
停止了正常工作。下面是用于返回日期行的简单宏示例。
Sub a()
Dim dt_start As Date
dt_start = #11/6/2021# ' 11 Jun 2021
Dim rDateColumn As Range
Set rDateColumn = ThisWorkbook.Worksheets("2").Range("A:A")
rDateColumn.NumberFormat = "dd/mm/yyyy"
w = rDateColumn.Find(What:=Format(dt_start, "dd/mm/yyyy"), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows).Row
End Sub
当我尝试运行它时它会返回
Run-time error '91':
。我也试过这段代码
lookIn:=xlValues
即使我将日期格式设置为“dd/mm/yyyy”,VBA 仍将其读取为“mm/dd/yyyy”。请参见下面的屏幕截图。
我尝试将 dt_start 转换为字符串 (Format(dt_start, "dd/mm/yyyy"),然后返回日期 DateValue(str_date),但是我回来了,我得到的是 11 月 6 日的“06/11/2021” 2021 年。
以下是我的系统区域设置:
和 Excel 日期设置。
非常感谢任何信息。谢谢!
解决方案
这可能会有所帮助:
Sub a()
'First get the date order (format) from the system.
Dim myFormatDate As String
Dim i: i = Application.International(xlDateOrder)
'xlDateOrder Long
'Order of date elements:
'0 = month-day-year,
'1 = day-month-year,
'2 = year-month-day
If i = 0 Then
myFormatDate = "m/d/yyyy" 'NOT mm/dd/yyyy! will give you 00/00/000 not the same in strings.
ElseIf i = 1 Then
myFormatDate = "d/m/yyyy"
ElseIf i = 2 Then
myFormatDate = "yyyy/m/d"
End If
Dim dt_start As Date
'dt_start = #11/6/2021# ' 11 Jun 2021
'Never trust this... Now you know why!
'Let us built!
Dim DD: DD = 6
Dim MM: MM = 11
Dim YYYY: YYYY = 2021
Dim w
dt_start = DateSerial(YYYY, MM, DD)
'Better to built the var-date using DateSerial
'Now you have a date and you have the control!
'Dim strDate As String: strDate = Format(dt_start, myFormatDate)
'the line above is optional, if you want to use instead
'of: Format(dt_start, myFormatDate)
'This way: What:=strDate.
Dim rDateColumn As Range
Set rDateColumn = ThisWorkbook.Worksheets("2").Range("A:A")
rDateColumn.NumberFormat = "dd/mm/yyyy"
w = rDateColumn.Find(What:=Format(dt_start, myFormatDate), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows).Row
End Sub
返回有关当前国家/地区和国际设置的信息。只读变体。
xlDateOrder:日期元素的顺序:0 = 月-日-年,1 = 日-月-年,2 = 年-月-日
推荐阅读
- python - Docker start 不在控制台上提供打印输出
- wpf - 如何使用 UI 扩展现有控件
- react-native - React-native 导航:this.props.navigation.navigate 返回 undefined is not an object
- r - R:将字符串粘贴为 dplyr 中的代码或函数参数
- javascript - Nodejs Firebase 事务 - 如果条件失败,则更新节点并发送错误
- java - 我如何测试这个异常抛出方法?
- c# - Visual Studio Code C# 调试问题(终端进程无法启动:shell 可执行文件“dotnet”的路径不是符号链接的文件。)
- reactjs - TypeError:无法解构“未定义”的属性“名称”,因为它未定义
- java - 我无法通过用户输入到 TextView 从 Firebase 数据库中检索数据
- javascript - 通过阅读更多链接截断文本并扩展文本