excel:vba类型不匹配比较日期
我试图对两个日期(在不同的列中)的年份和当前年份日期进行比较。如果年份相同,则应在第13列的相应行上写上“ATUAL”一词,如果年份不同,则不应写任何内容 这就是我到目前为止所尝试的excel:vba类型不匹配比较日期,vba,excel,Vba,Excel,我试图对两个日期(在不同的列中)的年份和当前年份日期进行比较。如果年份相同,则应在第13列的相应行上写上“ATUAL”一词,如果年份不同,则不应写任何内容 这就是我到目前为止所尝试的 Sub CopyColumn2() Dim i As Long Dim j As Long Dim lastrow As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim wbk As Workbook Dim wb As Worksheet Set wbk
Sub CopyColumn2()
Dim i As Long
Dim j As Long
Dim lastrow As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim wbk As Workbook
Dim wb As Worksheet
Set wbk = Workbooks.Open("I:\CGP\DEOPEX\01 - Supervisão\01 - Administrativo\06- ADM - Taís e Natalia\Férias - Aprovadas\FÉRIAS TÉCNICOS EXTERNAS.xlsx")
Set ws1 = ThisWorkbook.Sheets("BASE_TOTAL")
Set ws2 = wbk.Worksheets("FUNCIONÁRIOS")
lastrow = ws2.Range("A" & Rows.Count).End(xlUp).Row
For j = 2 To lastrow
If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then
ws1.Cells(j, 13) = "ATUAL"
Else
ws1.Cells(j, 13) = ""
End If
Next j
End Sub
日期放在I列和L列中,所有列都设置为日期。我的Excel是葡萄牙语的,所以我的日期格式是dd/mm/yyyy
当我运行代码时,我收到以下消息:
运行时错误13:类型不匹配
这一部分重点强调:
If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then
有人知道这里有什么问题吗?它应该可以工作,因为我的所有日期的格式都是相同的。试试这个:
Dim date1为日期,date2为日期
date1=ws1.Cells(j,9)
date2=ws1.Cells(j,12)
If
语句中使用变量
如果年(日期1)=年(日期)或年(日期2)=年(日期),则
您检查了哪一行抛出错误了吗?1)按照上面的步骤逐行检查代码,并查看错误发生的位置。2) 虽然所有日期的格式都相同,但它们的格式是文本还是excel日期?将它们全部格式化为相同的方式,但全部作为文本,这无助于您使用公式。重要信息,请确保日期格式正确,否则需要先执行一步才能将其转换为所需格式。@EganWolf是的,我编辑了问题。@我编辑了代码,突出显示了行。它们的格式都是Excel日期,而不是文本。我想问题出在日期上。。。我认为格式是mm-dd-yyyy或与我使用的不同的东西。它很有效,谢谢!为什么这会对我的代码产生影响?“我很好奇。”老实说,我不知道。它与日期格式的差异有某种联系。VBA使用美国格式,即
mmddyyyy
,Excel使用您的地区格式,在欧洲(我想它在欧洲到处都是)是ddmmyyyy
。因此,无论设置何种格式,VBA都无法理解直接从单元格中获取的日期。“来自答案的技巧”以某种方式将日期从Excel格式转换为VBA格式,并正确执行。它还可用于设置从VBA到单元格的日期。如果你直接这样做,你可能会把月份和日期放错地方。