【发布时间】:2018-06-08 15:43:18
【问题描述】:
我在两个不同的工作簿中使用两个不同的工作表。我正在使用第一个工作表中的数据来填写第二个工作表。
我在工作簿 A 中有两个列表(称为 x 和 y),在工作簿 B 中有两个列表。我正在比较工作簿 A 和 B 中的列表 x。如果 WorkbookA-ListX 中的任何单元格与任何单元格匹配在 WorkbookB-ListX 中的单元格中,我会将 WorkbookA-ListY 中的单元格的值复制到 WorkbookB-ListY 中的单元格中。
我无法比较原始的两个列表。我正在考虑使用 WorkbookA-ListX 中的第一个值并将其与数组 WorkbookB-ListX 进行比较以查看是否有任何匹配项,然后只增加 WorkbookA-ListX。
列表基本上是同一列中的一系列值,因此例如 B3:B53 是列表的大小。我用这个link 来帮助我,但是当我到达第一个“For iRow ...”时,我一直收到一个错误代码,上面写着“运行时错误13,类型不匹配”我应该从这里做什么?
Private Sub CommandButton1_Click()
Dim wkb0 As Workbook
Dim wkb1 As Workbook
Dim varSheet0, varSheet1 As Variant
Dim RangeToCheck0, RangeToCheck1 As String
Dim iRow, iCol As Long
Set wkb0 = Workbooks.Open("P:\BEN\EMOP\Work Space\Congestion_May.xlsx")
Set varSheet0 = wkb0.Worksheets("Page1").Range("B3:B82,B86:B105")
Set wkb1 = Workbooks.Open("P:\BEN\EMOP\Work Space\Congestion_Apr_abr.xlsx")
Set varSheet1 = wkb1.Worksheets("Page1").Range("B3:B51,B54:B73")
nlin = 1
ncol = 1
For iRow = LBound(varSheet0, 1) To UBound(varSheet0, 1)
For iCol = LBound(varSheet0, 2) To UBound(varSheet0, 2)
If varSheet0(iCol, iRow) = varSheet1(iRow, iCol) Then
varSheet0.Range("E" & iRow).Value = varSheet1.Range("E" & iRow).Value
End If
Next
Next
【问题讨论】:
-
我认为在你的范围内有多个区域意味着这个问题不适合用数组来解决
-
如果您设置使用上面的数组方法,那么需要注意的一点是您实际上并没有将值保存到数组中。如果您打开
Locals Window,您会发现varSheet0和varSheet1实际上都是范围。问题(imo)的困难部分是您的范围不连续,例如B3:B82,B86:B105