VBA Xmatch函数返回运行时错误1004

问题描述

我可能会在这里贴出我的问题,希望在我破墙而出之前寻求帮助。

这是交易:我有一个日期(Data_carga)和一个时间(Hora_carga)供用户更改其状态的负载。因此,我想将他的更改应用于我的后端“负载表”。

我的加载表(Table5)始终是按日期自定义排序的。因此,我想到的是从第一到最后(xmatch)和从最后到第一({{1})对日期列(Data_cargaWorksheets("CargasBD").Range("Table5[DATA]") row1 })。然后,使用在间接函数中合并的这两行,我将针对特定间隔row2 xmatch。然后,我会将地图映射到后端表上的相同负载以对其进行更新。

但是我无法使用Hora_carga函数来简单地在另一个选项卡上的表中找到一个值。我一直收到此运行时错误1004。

我的查询值和表格均为Date类型。所以我不知道为什么会收到这个错误

代码在下面

xmatch

顺便说一句,日期(Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Dim Data_carga As Date Dim Hora_carga As Date Dim Novo_status As String Dim row,row1,row2 As Integer Dim addRSS,Range_data As String Set In_range = Application.Intersect(Target,Range("$D$3:$P$11")) If Not In_range Is nothing Then Data_carga = Range("A" & Target.row).Value Hora_carga = Range(Left(Target.Address,Len(Target.Address) - Len(CStr(Target.row))) & "2").Value Novo_status = Application.WorksheetFunction.XLookup(Target.Value,Sheets("BD").Range("Table17[Abrev]"),Sheets("BD").Range("Table17[Status das cargas]"),"",1) 'This is where it breaks row1 = Application.WorksheetFunction.XMatch(Data_carga,Worksheets("CargasBD").Range("Table5[DATA]"),1) row2 = Application.WorksheetFunction.XMatch(Data_carga,-1) addRSS = Application.WorksheetFunction.Concat("CargasBD!C",1 + row1,":C",1 + row2) Range_data = Application.WorksheetFunction.INDIRECT(addRSS,True) row = Application.WorksheetFunction.XMatch(Hora_carga,Range_data,1) Sheets("CargasBD").Range("D" & row + row1).Value = Novo_status End If Application.EnableEvents = True End Sub )和时间(Data_carga)都可以获取了。

谢谢。

解决方法

让它终于工作了。

所以我要做的是:

  • 将我的查找变量更改为Range类型,而不是Date
  • 使用Set将数据复制到这两个即Hora_cargaData_carga

我搞砸了很多。如果我将Data_carga中的值粘贴到单元格中并在xmatch公式中使用它,则可以使用,但是我不想绕道而行。因此,我的变量(我已经将其更改为范围类型)和工作表中的范围有些奇怪。

继续之前的一件事:可以的时间值(Hora_carga)开始变得时髦了,在查找错误时,我被指示使用Set命令。

因此,我使用“本地窗口”调查了我的日期范围变量,并看到了两个变量之间的奇怪差异:

Locals window

即使我同时将这两种标签都归为Range类型,但我的hora_carga最终还是成为了Date类型。而且它的#值很奇怪。因此,我只是将自己所做的工作复制到Hora_carga上,并且奏效了。

这是最终代码:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

Dim Data_carga,Hora_carga As Range
Dim Novo_status,addrss As String
Dim HoraRow,rowSubRngStrt,rowSubRngEnd,rowHdr As Integer

Set In_range = Application.Intersect(Target,Range("$D$3:$P$11"))
If Not In_range Is Nothing Then
    Set Data_carga = Range("A" & Target.row)
    Set Hora_carga = Range(Cells(2,Target.Column).Address(0,0))
    Novo_status = Application.WorksheetFunction.XLookup(Target.Value,Sheets("BD").Range("Table17[Abrev]"),Sheets("BD").Range("Table17[Status das cargas]"),"",1)
    
    rowHdr = Sheets("CargasBD").ListObjects("Table5").HeaderRowRange.row
    rowSubRngStrt = Application.WorksheetFunction.XMatch(Data_carga,Sheets("CargasBD").ListObjects("Table5").DataBodyRange.Columns(1),1) + rowHdr
    rowSubRngEnd = Application.WorksheetFunction.XMatch(Data_carga,Sheets("CargasBD").Range("Table5[DATA]"),-1) + rowHdr
    addrss = Application.WorksheetFunction.Concat("C",":C",rowSubRngEnd)
    
    HoraRow = Application.WorksheetFunction.XMatch(Hora_carga,Sheets("cargasBD").Range(addrss),1)
    
    Sheets("CargasBD").Range("D" & (rowSubRngStrt + HoraRow - 1)).Value = Novo_status
End If

Application.EnableEvents = True
End Sub