Modification d'une valeur de chaîne au format de date dans VBA


1

Je travaille sur un script VBA dans Excel. Voici le code sur lequel je travaille.

    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

Dans ce code, j utilise une condition de comparaison de la date interne à fromdate et todate. Mais les dates de début et de fin sont définies par l'utilisateur. Ils sont au format string. Mais la date interne est dans un format personnalisé ("jj / mm / aaaa h: mm") car elle est extraite de SQL. Donc, je ne peux pas changer le format de la date interne. Par conséquent, je dois changer le format pour fromdate et todate, afin que la condition fonctionne correctement.

Est-il possible de prendre la valeur de chaîne donnée par l'utilisateur pour les dates de début et de fin et de la changer au format souhaité au niveau VBA? ou y a-t-il un autre moyen d'y parvenir?

Réponses:


1

La fonction CDate crée une date à partir de toute expression de date valide

De l'aide Excel vba:

expression de date

Toute expression pouvant être interprétée comme une date, y compris les littéraux de date, les nombres ressemblant à des dates, les chaînes ressemblant à des dates et les dates renvoyées par des fonctions. Une expression de date est limitée à des nombres ou des chaînes, quelle que soit leur combinaison, pouvant représenter une date du 1er janvier 100 au 31 décembre 9999.

Les dates sont stockées dans un nombre réel. Les valeurs à gauche de la décimale représentent la date; les valeurs à droite de la décimale représentent l'heure. Les nombres négatifs représentent des dates antérieures au 30 décembre 1899.


Merci pour l'information. Mais je suis nouveau à VBA. puis-je connaître la syntaxe d'utilisation de cette fonction CDate. Comment puis-je l'insérer dans mon code?
Ramya

Je vous suggère d'utiliser le système d'aide vba
Dale M
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.