gpt4 book ai didi

vba - Excel-VBA 将不正确的日期值从 SAS 传输到 Excel 工作表

转载 作者:行者123 更新时间:2023-12-02 14:08:18 30 4
gpt4 key购买 nike

我的 VBA 代码通过 ADODB.Connection"SAS.LocalProvider.1" 将 SAS 表传输到 Excel 工作表。两个 SAS 列的日期格式为 YYYY-MM-DD,例如 2015-09-012015-09-30

我还在 VBA 代码中对这些列使用 format,例如 Sheet2.Range(Range("C2"), Range("C2").End(xlDown)) .NumberFormat = "YYYY-MM-DD"。然后应该将整个列转换为正确的日期格式。

但是,最终我在 Excel 工作表中得到了日期值,如 1955-08-311955-09-29 而不是 2015 -09-012015-09-30

我检查了 SAS 表,两列都是数字,格式为日期YYDDMM10。

我在 VBA 代码中编写了 YYMMDDYY-MM-DD,正如 SAS 格式所示,但没有帮助。它给出的年份仍然与 1955 年相同(或者只有 55)。

在代码中,您可以看到我尝试更改“table-transer 之前”的格式。但我也在“ table 转移后”尝试过,但得到了完全相同的结果。

Public Sub SASTransfer()
Dim rTarget1 As Range: Set rTarget1 = Sheet2.Range("A2")
Dim sSasTable1 As String: sSasTable1 = SASOutputPath & "\" & SASOutput1 & ".sas7bdat"

Sheet2.Range(Range("C2"), Range("C2").End(xlDown)).NumberFormat = "YYYY-MM-DD" ' This should change the format of the whole C-column
Sheet2.Range(Range("D2"), Range("D2").End(xlDown)).NumberFormat = "YYYY-MM-DD"

Dim con1 As New ADODB.Connection
Dim rs1 As New ADODB.Recordset
con1.Provider = "SAS.LocalProvider.1"
con1.Open
rs1.Open sSasTable1, con1, adOpenForwardOnly, adLockReadOnly, ADODB.adCmdTableDirect
rTarget1.CopyFromRecordset rs1
rs1.Close
Set rs1 = Nothing
con1.Close
Set con1 = Nothing

End Sub

最佳答案

  • SAS 使用 1960 年 1 月 1 日作为第 0 天的引用日期。

  • Excel 使用 1900 年 1 月 0 日(即 1899 年 12 月 31 日)作为第 0 天的引用日期。

1960 年 1 月 1 日至 1899 年 12 月 31 日之间的天数为 21,916。

由于您要从 SAS 转到 Excel,因此请将 21916 添加到 SAS 日期。

data excel_export;
set have;
Excel_Date = SAS_Date + 21916;
format Excel_Date mmddyy10.;
run;

关于vba - Excel-VBA 将不正确的日期值从 SAS 传输到 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33568103/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com