坚持使用我的vba代码根据日期筛选查找数据

坚持使用我的vba代码根据日期筛选查找数据,vba,excel,Vba,Excel,当我使用日期时,这很好,但如果我试图使用输入框输入我想要的日期来获取数据,它就不起作用了。。。有什么建议吗 sub datewise() Dim lastrow As Long, erow As Long, i As Integer, lastcolumn As Long Dim today, tomorrow As String Dim k As Integer, j As Integer, s As Integer today = InputBox(Prompt:="Please ent

当我使用日期时,这很好,但如果我试图使用输入框输入我想要的日期来获取数据,它就不起作用了。。。有什么建议吗

sub datewise()
Dim lastrow As Long, erow As Long, i As Integer, lastcolumn As Long
Dim today, tomorrow As String
Dim k As Integer, j As Integer, s As Integer


today = InputBox(Prompt:="Please enter the date in d/m/yyyy format", Title:="Shift Date", Default:="7/6/2018")

'today = Date
'tomorrow = today + 1

lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
 j = 3
 Do While j < 40
 If today = Sheet1.Cells(2, j) Then
 Sheet1.Cells(2, j).Copy
 Sheet1.Paste Worksheets("Sheet2").Cells(2, 2)
 Sheet1.Paste Worksheets("Sheet2").Cells(2, 4)
 Sheet1.Paste Worksheets("Sheet2").Cells(2, 6)
 k = j
 Exit Do
 End If
 j = j + 1
 Loop

 '------1800 Shift------


i = 3
erow = 4
Do While i <= lastrow

If Sheet1.Cells(i, k).Value = 18 Then
Sheet1.Cells(i, 1).Copy
Sheet1.Paste Worksheets("Sheet2").Cells(erow, 1)

Sheet1.Cells(i, 2).Copy
Sheet1.Paste Worksheets("Sheet2").Cells(erow, 2)

erow = erow + 1
End If
i = i + 1
Loop



Application.CutCopyMode = False
Sheet2.Columns().AutoFit
Range("A1").Select
End Sub
sub-datewise()
Dim lastrow为长,erow为长,i为整数,lastcolumn为长
今天黯淡,明天如弦
将k作为整数,j作为整数,s作为整数
今天=输入框(提示:=“请以d/m/yyyy格式输入日期”,标题:=“轮班日期”,默认值:=“2018年7月6日”)
“今天=日期
“明天=今天+1
lastrow=Sheet1.Cells(Rows.Count,1).End(xlUp).Row
j=3
当j<40时,进行测试
如果今天=表1.单元格(2,j),则
活页1.单元格(2,j).复制
表1.粘贴工作表(“表2”).单元格(2,2)
表1.粘贴工作表(“表2”).单元格(2,4)
表1.粘贴工作表(“表2”).单元格(2,6)
k=j
退出Do
如果结束
j=j+1
环
----1800班次------
i=3
erow=4
当我时,请尝试
DateValue()
函数

today = DateValue(InputBox(Prompt:="Please enter the date in d/m/yyyy format", Title:="Shift Date", Default:="7/6/2018"))

VBA非常以EN-US为中心,您试图让它在预期MDY日期时接受DMY日期

真正的日期只不过是数字;1899年12月31日以后每天1次。当与单元格的值进行比较时,是否使用MDY日期(如2018年10月6日)或43261并不重要;将匹配或不匹配(视情况而定)

如果要请求DMY日期,则必须先将其转换为MDY或数字,然后才能在VBA中使用它

Dim today as long, tomorrow As String, tmp as string

tmp = InputBox(Prompt:="Please enter the date in d/m/yyyy format", Title:="Shift Date", Default:=format(date, "d/m/yyyy"))

today =dateserial(split(tmp, "/")(2), split(tmp, "/")(1), split(tmp, "/")(0))

Do While j < 40
    If today = Sheet1.Cells(2, j).value2 Then
        ...
    End If
    j = j + 1
Loop
Dim今天长,明天长,tmp长
tmp=InputBox(提示:=“请以d/m/yyyy格式输入日期”,标题:=“轮班日期”,默认:=格式(日期,“d/m/yyyy”))
今天=日期序列(拆分(tmp,“/”)2、拆分(tmp,“/”)1、拆分(tmp,“/”)0)
当j<40时,进行测试
如果今天=表1.单元格(2,j).值2,则
...
如果结束
j=j+1
环

我更改了默认的InputBox值,但如果要将其设置为静态,请不要使用像2018年7月6日这样不明确的DMY/MDY值。

我将强制使用特定格式:

Sub INeedADate()
    Dim today As Date, d As String, arry
    d = Application.InputBox(Prompt:="Please enter the date in d/m/yyyy format", Title:="Shift Date", Default:="7/6/2018", Type:=2)
    arry = Split(d, "/")
    today = DateSerial(arry(2), arry(1), arry(0))
End Sub

2,1,0顺序与您的输入格式相匹配。

我认为DateValue期望MDY,而不是DMY,但CDate应该根据用户的区域短日期设置进行选择。@KasiViswanath感谢您的反馈,