坚持使用我的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感谢您的反馈,