我正在 Excel 中编写 VBA 脚本。以下是我正在处理的代码。
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
在此代码中,我使用将内部日期与起始日期和终止日期进行比较的条件。但起始日期和终止日期是用户定义的。它们是字符串格式。但内部日期是从 sql 中检索到的自定义格式(“dd/mm/yyyy h:mm”)。所以我无法更改内部日期的格式。因此,我必须更改起始日期和终止日期的格式,以便条件正常工作。
是否可以获取用户提供的 fromdate 和 todate 字符串值并在 VBA 级别将其更改为所需的格式?或者还有其他方法可以实现这一点吗?
答案1
CDate 函数根据任意有效的日期创建一个日期日期表达式
来自 Excel vba 帮助:
日期表达式
任何可解释为日期的表达式,包括日期文字、看起来像日期的数字、看起来像日期的字符串以及从函数返回的日期。日期表达式仅限于数字或字符串的任意组合,可以表示 100 年 1 月 1 日到 9999 年 12 月 31 日之间的日期。
日期作为实数的一部分存储。小数点左边的值表示日期;小数点右边的值表示时间。负数表示 1899 年 12 月 30 日之前的日期。