问题描述
我可能会在这里贴出我的问题,希望在我破墙而出之前寻求帮助。
这是交易:我有一个日期(Data_carga
)和一个时间(Hora_carga
)供用户更改其状态的负载。因此,我想将他的更改应用于我的后端“负载表”。
我的加载表(Table5
)始终是按日期自定义排序的。因此,我想到的是从第一到最后(xmatch
)和从最后到第一({{1})对日期列(Data_carga
)Worksheets("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_carga
和Data_carga
我搞砸了很多。如果我将Data_carga
中的值粘贴到单元格中并在xmatch
公式中使用它,则可以使用,但是我不想绕道而行。因此,我的变量(我已经将其更改为范围类型)和工作表中的范围有些奇怪。
继续之前的一件事:可以的时间值(Hora_carga
)开始变得时髦了,在查找错误时,我被指示使用Set
命令。
因此,我使用“本地窗口”调查了我的日期范围变量,并看到了两个变量之间的奇怪差异:
即使我同时将这两种标签都归为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