【发布时间】:2020-09-18 22:50:21
【问题描述】:
我可能会在这里发布我的问题并希望在我撞墙之前得到帮助。
这是交易:我有一个日期(Data_carga)和一个时间(Hora_carga),用于用户更改其状态的负载。所以我想将他的更改应用到我的后端负载表。
我的负载表 (Table5) 始终按日期自定义排序。所以我的想法是xmatch我的Data_carga反对日期列(Worksheets("CargasBD").Range("Table5[DATA]")),从头到尾(row1)和从尾到头(row2)。然后,使用在间接函数中组合的这两行,我将 xmatch Hora_carga 针对该特定间隔。然后我将映射到后端表上的相同负载来更新它。
但我无法让 xmatch 函数简单地在另一个选项卡上的表中定位一个值。我不断收到此运行时错误 1004。
我的查找值和表格都是日期类型。所以我不知道为什么会出现这个错误。
代码如下。
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]"), "", 0, 1)
'This is where it breaks
row1 = Application.WorksheetFunction.XMatch(Data_carga, Worksheets("CargasBD").Range("Table5[DATA]"), 0, 1)
row2 = Application.WorksheetFunction.XMatch(Data_carga, Worksheets("CargasBD").Range("Table5[DATA]"), 0, -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, 0, 1)
Sheets("CargasBD").Range("D" & row + row1).Value = Novo_status
End If
Application.EnableEvents = True
End Sub
顺便说一句,日期(Data_carga) 和时间(Hora_carga) 可以正常获取。
提前谢谢你。
【问题讨论】:
-
这不是在 vba 中引用表的方式。见:stackoverflow.com/questions/18030637/…
-
也使用:
Hora_carga = Cells(2, Target.Column).Value更少的步骤。 -
谢谢,@ScottCraner。我去了那个链接,从一个跳到另一个,学到了一堆可能有帮助的东西。我已将其更改为:
row1 = Application.WorksheetFunction.XMatch(Data_carga, Sheets("CargasBD").ListObjects("Table5").DataBodyRange.Columns(1), 0, 1),但仍然没有成功。 -
我已经使用相同的文字进行了测试,但在表格中查找 8 的值,按从 1 到 20 的数字排序:
row_teste = Application.WorksheetFunction.XMatch(8, Sheets("Sheet1").ListObjects("Table7").DataBodyRange.Columns(1), 0, 1)它按预期工作,所以我猜我的看起来更新(Data_carga)在某种程度上与我的日期类型表列不匹配(Sheets("CargasBD").ListObjects("Table5").DataBodyRange.Columns(1)我将进行更多测试并尝试找到解决此问题的方法。 -
看来我有突破了。也许如果我将我的日期变量(
Data_carga)更改为范围类型,它可以工作......
标签: excel vba runtime-error match