1

Я работаю над сценариями VBA в Excel. Ниже приведен код, над которым я работаю.

    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

В этом коде я использую условие сравнения внутренней даты с исходной и текущей. Но fromdate и todate определяются пользователем. Они в строковом формате. Но внутренняя дата находится в пользовательском формате («дд / мм / гггг ч: мм»), как это получено из sql. Поэтому я не могу изменить формат внутренней даты. Поэтому я должен изменить формат для fromdate и todate, чтобы условие работало правильно.

Можно ли взять строковое значение, данное пользователем для fromdate и todate, и изменить его на желаемый формат на уровне VBA? или есть другой способ добиться этого?

1 ответ1

1

Функция CDate создает дату из любого допустимого выражения даты

Из справки Excel vba:

выражение даты

Любое выражение, которое может быть интерпретировано как дата, включая литералы даты, числа, которые выглядят как даты, строки, которые выглядят как даты, и даты, возвращаемые функциями. Выражение даты ограничено числами или строками в любой комбинации, которые могут представлять дату с 1 января 100 года по 31 декабря 9999 года.

Даты хранятся как часть действительного числа. Значения слева от десятичной запятой представляют дату; значения справа от десятичной запятой представляют время. Отрицательные числа представляют даты до 30 декабря 1899 года.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .