是否可以通过excel记录集格式化日期

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

我从SQL Server获取数据,现在我想将其复制到Excel工作表中。我尝试格式化“ start_date”,但是它仅在第一列上应用格式,所有其他显示都存储在SQL Server中。您能否建议修改代码?

Sub ReadMBDataFromSQL()
    Dim Server_Name, Database_Name, User_ID, Password, SQLStr As String

    Set Cn = CreateObject("ADODB.Connection")
    Set RS = New ADODB.Recordset

    Server_Name = ""
    Database_Name = ""
    User_ID = ""
    Password = ""
    SQLStr = "SELECT lot, po, start_date, input_sponge_type, input_sponge_type FROM PalladiumNitrateMB WHERE start_date >= '" & Format(Range("start"), "mm-dd-yyyy") & "' AND start_date < '" & Format(Range("end"), "mm-dd-yyyy") & "' ORDER BY lot ASC"

    Set Cn = New ADODB.Connection
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
    ";Uid=" & User_ID & ";Pwd=" & Password & ";"

    RS.Open SQLStr, Cn, adOpenKeyset, adLockBatchOptimistic

    With Worksheets("PdNitrateMassBalance").Range("A5:N600")
        RS("start_date") = Format(RS("start_date"), "dd/mm/yyyy")
        .ClearContents
        .CopyFromRecordset RS
    End With

    RS.Close
    Set RS = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub
sql-server excel vba ado
2个回答
2
投票

尝试替换此部分

With Worksheets("PdNitrateMassBalance").Range("A5:N600")
    RS("start_date") = Format(RS("start_date"), "dd/mm/yyyy")
    .ClearContents
    .CopyFromRecordset RS
End With

使用此

With Worksheets("PdNitrateMassBalance")
    With .Range("A5:N600")
        .ClearContents
        .CopyFromRecordset RS
    End With
    FixDatesFromSQL (.Range("A:A"))
End With

和其他子:

Sub FixDatesFromSQL(DatesRange As Range)
Dim r As Range
Dim firstDash As Integer, secondDash As Integer, i As Integer

Set DatesRange = Range(Cells(1, 1), Cells(3, 1))

For Each r In DatesRange
    firstDash = 0
    secondDash = 0
    For i = 1 To Len(r.Text)
        If Mid(r.Text, i, 1) = "-" Then
            If Not firstDash = 0 Then
                secondDash = i
                Exit For
            Else
                firstDash = i
            End If
        End If
    Next

    With r
        .Value = DateSerial(Left(r.Text, 4), Mid(r.Text, firstDash + 1, IIf(secondDash = 7, 1, 2)), Mid(r.Text, secondDash + 1))
        .NumberFormat = "dd/mm/yyyy"
    End With
Next

End Sub

更新添加了一个子项,可将日期格式转换为“ yyyy-mm-dd”文本格式。


0
投票

通过修改SQL查询解决的问题,我要求输入日期convert(varchar,start_date,103)

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