【发布时间】:2019-07-04 13:56:03
【问题描述】:
我有一个简单的宏,其中包含一个动态数组,该数组在满足条件时填充。数据填充宏,因为它应该正在运行,直到将数据粘贴到电子表格上。现在,所有数据都已正确粘贴,日期值除外。日期值被错误地从欧洲格式粘贴到美国格式到电子表格上(即 dd-mm-yyyy 到 mm-dd-yyyy)。因此,例如,电子表格上的 2019 年 3 月 1 日变成了 2019 年 1 月 3 日。请注意,无论我是否预先格式化目标文件,问题仍然存在。
数组有 14 列,只有 12-13 列是日期值。
编辑摘要
从不相关的信息中分解代码;添加了结果图片。
以下是代码
Sub Verification()
Dim NewWorkbook As String, NewWorksheet As String
Dim wb As Workbook, sh As Worksheet
Dim LoopCounter As Long
Dim NewEntryCounter As Long
Dim Cols As Long, Rows As Long
Dim r As Range
Dim arr As Variant, NewEntry() As Variant
Dim myRange As Integer
NewWorkbook = LCase(InputBox("What is the name of the new report?"))
NewWorksheet = LCase(InputBox("What is the name of the sheet?"))
Set wb = ThisWorkbook
Set sh = wb.Sheets("Renouvellement")
Cols = Workbooks(NewWorkbook).Sheets(NewWorksheet).Range(Workbooks(NewWorkbook).Sheets(NewWorksheet).Cells(1, 1), Workbooks(NewWorkbook).Sheets(NewWorksheet).Cells(1, 1).End(xlToRight)).Count
Rows = sh.Range(sh.Cells(1, 1), sh.Cells(1, 1).End(xlDown)).Count
For Each r In Workbooks(NewWorkbook).Sheets(NewWorksheet).Range("A2", Workbooks(NewWorkbook).Sheets(NewWorksheet).Range("A1").End(xlDown))
If (r.Offset(0, 21).Text = "Red" Or r.Offset(0, 21).Text = "Blue") And r.Offset(0, 17).Value >= 24 Then
arr = Application.VLookup(r.Value, sh.Range("A:A"), 1, 0)
If IsError(arr) Then
NewEntryCounter = NewEntryCounter + 1
ReDim Preserve NewEntry(1 To Cols, 1 To NewEntryCounter)
For LoopCounter = 1 To Cols
NewEntry(LoopCounter, NewEntryCounter) = r.Offset(0, LoopCounter - 1)
Next LoopCounter
Else
End Sub
来自本地窗口的示例结果
将日期值传输到电子表格时的示例结果
正如您所见,在将数据从 vba 传输到电子表格时,插入的第一个值发生了变化。第二个值被正确传输。第三个不是,依此类推。
【问题讨论】:
-
粘贴日期的目标列的格式是什么?您的 Windows 区域设置短日期格式是什么(我怀疑
DMY或类似的)。 -
那些不更改的日期如果颠倒过来将不是有效日期(例如,在第二个数据点上没有第 13 个月)。这就解释了为什么有些日期会改变。正如在其他 cmets 中提到的,数据的显示方式取决于应用于单元格的格式。这与代码无关 - 信息被正确传递。宏运行后,选择此列,然后转到格式化/格式化单元格。查看“数字”选项卡,您可能会发现“区域设置”不是您认为的那样。更改语言环境,看看是否会有所不同?
-
@CindyMeister 我认为你做对了。一旦粘贴到电子表格上,这些值就会变得混乱。我查了一下,13 号以上的天数以一般格式存储
-
@RonRosenfeld 我无法访问 Windows 区域设置,因为我没有权限
-
更新:如果我在 Excel 单元格中插入随机日期,例如 01/07/2018,我会遇到错误“检测到不明确的名称:验证日期”