Zmiana formatu wartości ciągu na datę w języku VBA

1

Pracuję nad skryptami VBA w programie Excel. Poniżej znajduje się kod, nad którym pracuję.

    Option Explicit

Sub MoveThingsAbout()

Worksheets("Sheet3").Cells.Clear

Worksheets("Sheet3").Range("A1").Value = "JOB"
Worksheets("Sheet3").Range("B1").Value = "STOCKCODE"
Worksheets("Sheet3").Range("C1").Value = "DATE"
Worksheets("Sheet3").Range("D1").Value = "QUANTITY TO MAKE"
Worksheets("Sheet3").Range("E1").Value = "QUANTITY MANUFACTURED"


  Dim row As Integer
  Dim fromdate As String
  Dim stockCode As String
  Dim todate As String
  Dim innerRow As Integer


   fromdate = ""
   todate = ""
   stockCode = ""

   stockCode = Worksheets("Sheet2").Range("B2").Value
    fromdate = Worksheets("Sheet2").Range("D2").Value
    todate = Worksheets("Sheet2").Range("F2").Value


    innerRow = 2
    row = 2
    Do While (Worksheets("Sheet1").Range("A" & innerRow).Value <> "")

        innerdate = ""
        innerStockCode = ""

        innerdate = Worksheets("Sheet1").Range("L" & innerRow).value
        innerStockCode = Worksheets("Sheet1").Range("G" & innerRow).Value

         If (stockCode = innerStockCode And (innerdate >= fromdate And innerdate <= todate)) Then

            Worksheets("Sheet3").Range("A" & row).Value = Worksheets("Sheet1").Range("A" & innerRow).Value
            Worksheets("Sheet3").Range("B" & row).Value = Worksheets("Sheet1").Range("G" & innerRow).Value
            Worksheets("Sheet3").Range("C" & row).Value = Worksheets("Sheet1").Range("L" & innerRow).Value
            Worksheets("Sheet3").Range("D" & row).Value = Worksheets("Sheet1").Range("U" & innerRow).Value
            Worksheets("Sheet3").Range("E" & row).Value = Worksheets("Sheet1").Range("V" & innerRow).Value

         End If

       innerRow = innerRow + 1
       row = row + 1

    Loop

End Sub

W tym Kodeksie używam warunku porównania wewnętrznej daty z datą i datą. Ale data i data są zdefiniowane przez użytkownika. Są w formacie ciągu. Ale data wewnętrzna ma format niestandardowy („dd / mm / rrrr h: mm”), ponieważ jest pobierana z sql. Nie mogę więc zmienić formatu daty wewnętrznej. Dlatego muszę zmienić format fromdate i todate, aby warunek działał poprawnie.

Czy można pobrać wartość ciągu podaną przez użytkownika dla fromdate i todate i zmienić ją na pożądany format na poziomie VBA? czy jest jakiś inny sposób na osiągnięcie tego?

Ramya
źródło

Odpowiedzi:

1

Funkcja CDate tworzy datę na podstawie dowolnego prawidłowego wyrażenia daty

Z pomocy Excel vba:

wyrażenie daty

Każde wyrażenie, które można interpretować jako datę, w tym literały daty, liczby, które wyglądają jak daty, ciągi, które wyglądają jak daty i daty zwracane z funkcji. Wyrażenie daty jest ograniczone do liczb lub ciągów znaków, w dowolnej kombinacji, które mogą reprezentować datę od 1 stycznia 100 do 31 grudnia 9999.

Daty są przechowywane jako część liczby rzeczywistej. Wartości po lewej stronie dziesiętnej reprezentują datę; wartości po prawej stronie dziesiętnej reprezentują czas. Liczby ujemne oznaczają daty sprzed 30 grudnia 1899 r.

Dale M.
źródło
dzięki za informację. Ale jestem nowy w VBA. czy mogę znać składnię używania tej funkcji CDate. Jak wstawić go do mojego kodu?
Ramya
Sugeruję skorzystanie z systemu pomocy vba
Dale M