哪个日期系统不识别VBA /默认?

问题描述 投票:3回答:2

我在Excel中写VBA子程序来存储2个日期之间的所有日期值在一个一维数组,然后检查在另一片的范围内的每个值。

它被存储比片上的日期值更大的值1462 - 当代码敛日期值(它实际上是用哪一个)为整数(或双)我的问题是。

我使用的是1904日期系统,所以我可以使用负的时间值,我在澳大利亚这样的日期格式DD / MM / YYYY。

举个例子;

在片材:2019年1月1日= 42004

中的代码:2019年1月1日= 43466

我理解其使用使我相信也许VBA是默认的表值是在1900年和转换时再次运行代码的价值到1904年1900对1904日期系统时,所不同的是一样的日期值之间的差异?

该工作簿被设置如下:

Sheet1包含从2019年1月1日至Range("A1:A25") 25/01/2019日期。

Sheet2包含在细胞A1 2019年1月1日和2019年10月1日在细胞A2and一个的ActiveX commandbutton

和代码:

Private Sub CommandButton1_Click()
Dim myStart As Long
Dim myEnd As Long

myStart = Me.Range("A1").Value
myEnd = Me.Range("A2").Value

Dim v As Variant
Dim x As Long
Dim myArr As Variant
ReDim myArr(0 To 100)
x = 0

For v = myStart To myEnd
    If v = Empty Then Exit For
    myArr(x) = v
    Debug.Print ("v = " & v)
    Debug.Print ("myArr = " & myArr(x))
    x = x + 1
Next

Dim lastrow As Long
lastrow = Me.Cells(Rows.Count, 4).End(xlUp).Row
x = 0
For Each cell In Sheet1.Range("A1:A100")
Debug.Print (CDbl(cell))
    If cell = myArr(x) Then
        Me.Cells(lastrow, 3).Value = cell
        Me.Cells(lastrow, 4).Value = Format(cell, "dd/mm/yyyy")
        lastrow = lastrow + 1
    End If
    x = x + 1
Next
End Sub

输出用于在列3中的cell值和4如下(前5行用于演示):

       C         D             Sheet1.Range("A1:A5")[when displayed as number format] 
1    43466    01/01/2019                42004
2    43467    02/01/2019                42005
3    43468    03/01/2019                42006
4    43469    04/01/2019                42007
5    43470    05/01/2019                42008

该日期被写入单元作为短日期格式不数值。

使用威吓窗口我注意到?cdbl(DateValue(now)) = 43496 (31/01/2019)这让我不知道该值是使用1904日期系统的日期是否正确?每在Sheet1中的值应该是42034

被这个问题所造成的,我使用的数据类型或函数,它是如前面质疑 - 纸张将它们转换为1904,当值分配到Sheet2用VBA,它是用Excel或者别的什么错误?

我发现同样的问题here on mrexcel一个问题,不过分辨率有变化Excel中使用1900日期系统或从代码,我希望能避免两者的值减去1462。

excel vba date
2个回答
5
投票

一般来说,在VBA日期系统比在Excel中日期系统不同。您可以把这3日系统选项:

  • Excel的日期
  • Excel的日期与1904性能
  • VBA日期

这就是区别:

日期将被转换成数字。例如,每日期被转换为一个数字,而是起始号码是有点不同。

  • 在Excel中,1被转换为01.January.1900;
  • 在VBA中,1被转换为31.December.1899;
  • 在Excel中用1904年,1被转换为02.January.1904;

1904系统(或其缺乏)是每工作簿设置。因此,如果你有2个工作簿在Excel中,一个与1904年,一个没有它,它会相应地识别它们。该系统被设置在:

文件>选项>高级>使用1904日期系统

enter image description here

在一般情况下,如果有机会的话,有人莫名其妙地与错误的系统更改工作簿,考虑在工作簿的开通增加此项检查:

Private Sub Workbook_Open()    
    If ThisWorkbook.Date1904 Then
        MsgBox "System is 1904, consider some action!"
    End If        
End Sub

如果你想知道选择哪个系统 - 我从来不推荐使用1904。


0
投票

> VBA - - >片消失,如果你的价值观去片暗淡的日期值作为date数据类型的问题提供解决方案,以我的例子同事提及。

© www.soinside.com 2019 - 2024. All rights reserved.