【发布时间】:2019-01-26 03:22:03
【问题描述】:
我编写了下面的代码来在工作表“CX”列 D 中的工作表“Fusion”列 H 中搜索一个值(供应商名称)。我也在做相反的检查,所以如果相同的值工作表 CX 中的(供应商名称)在工作表“Fusion”中。我不是在寻找精确匹配,因此使用 Instr 并以两种方式进行比较,因为我不确定用户如何在任一工作表中输入信息。
任一单元格中的数据类型应为文本。 如果找到匹配项,则在工作表“CX”的最后一列中,它应该只填充“找到供应商”或“未找到供应商”
目前它没有用任何数据填充最后一列,但宏在任何时候都没有出错。
我尝试添加 msgboxes 并且“Here”和“Here3”被触发,但它似乎没有触及“Here2”的代码部分,所以我认为它是导致问题的原因,但不确定如何解决。
任何帮助将不胜感激。
Option Explicit
Sub CompareCXFusion()
Dim CX As Worksheet
Dim Fusion As Worksheet
Dim strTemp as string
Dim strCheck as string
Dim i As Long, J As Long
Dim CXArr As Variant
Dim FusionArr As Variant
Dim match As Boolean
Dim CXRng As Range
Dim FusionRng As Range
Set CX = ActiveWorkbook.Sheets("CX")
Set Fusion = ActiveWorkbook.Sheets("Fusion")
Set CXRng = CX.Range("A2", CX.Cells(Rows.Count, "A").End(xlUp).Offset(0, 6))
Set FusionRng = Fusion.Range("A2", Fusion.Cells(Rows.Count, "A").End(xlUp).Offset(0, 9))
CXArr = CXRng.Value2
FusionArr = FusionRng.Value2
strTemp = lcase(trim(FusionArr(J, 7)))
strCheck = lcase(trim(CXArr(i, 3)))
For i = 1 To UBound(CXArr)
Match = False
For J = 1 To UBound(FusionArr)
MsgBox "Here"
If (Instr(strTemp, strCheck) > 0) OR (InStr(strCheck, strTemp) > 0) Then
MsgBox"Here2"
CXArr(i, 6) = "Supplier Found"
Else
Msgbox"Here3"
CXArr(i, 6) = "Supplier not found"
End If
Next J
Next i
End Sub
我期望的预期输出是:如果在 Fusion 的 H 列中,供应商名称是“供应商 A”,并且工作表“CX”的 D 列中的值是“供应商 A LTD”,那么我希望它用“Supplier Found”填充工作表 CX 中的 G 列,因为它是在字符串中找到的。
如果您需要更多信息,请告诉我。
我不知道如何正确插入我的数据示例,否则我会有
【问题讨论】:
-
你正在填充一个数组——一旦它被填充,你想用这个数组做什么?在这段代码中,您没有向列写入任何内容。另外,
match的目的是什么?cell? -
填充数组后,我想在 FusionArr 的第 7 个元素中搜索 CXarr 中的第 3 个元素,反之亦然。我以为我在最后填充了 CXarr 中的第 6 个元素? CxArr(i,6) = "找到供应商" ?没有什么。我试图修改我编写的其他一些代码,但没有意识到我实际上根本没有使用这两个 Dim,所以我将删除那些
-
你的意思是数组的列?
-
@MattWilliams “目前它没有用任何数据填充最后一列,但宏在任何时候都没有出错。” - 我想知道你的意思是什么.老实说,我认为这里不需要数组 - 为什么不只使用范围?
-
@dwirony 所以我想根据是否在数组中找到值,用“找到供应商”或“未找到供应商”填充工作表“CX”上的 G 列。我运行上面的代码,它运行没有错误,但在 G 表 CX 列中没有填充任何内容