Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel:vba类型不匹配比较日期_Vba_Excel - Fatal编程技术网

excel:vba类型不匹配比较日期

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

我试图对两个日期(在不同的列中)的年份和当前年份日期进行比较。如果年份相同,则应在第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 = 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到单元格的日期。如果你直接这样做,你可能会把月份和日期放错地方。