如何从Excel记录集格式化日期?

我从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
wangleaishang3 回答:如何从Excel记录集格式化日期?

尝试替换此部分

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
    FixDatesFromYYYY_MM_DD .Range("A:A"),"dd/mm/yyyy"
End With

以及其他子项:

Sub FixDatesFromYYYY_MM_DD(DatesRange As Range,Format As String)
Dim r As Range
Dim firstDash As Integer,secondDash As Integer,i As Integer

For Each r In DatesRange
    If Not r.Value = "" Then
        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)),secondDash + 1))
            .NumberFormat = Format
        End With
    End If
Next

End Sub

更新
添加了一个子来转换“ yyyy-mm-dd”文本格式的日期。

,

通过修改SQL查询解决了问题,我要求使用 convert(varchar,start_date,103)

本文链接:https://www.f2er.com/2786935.html

大家都在问