Получать значение из другой книги, используя vba, где значения соответствуют?
У меня есть следующая книга:
Мастерская книга
Column E Column G Column J Column V Expecting 12/12/2016 111 555 12/12/2015 222 444 12/12/2014 333 666
У меня также есть книга под названием slave:
Рабская рабочая тетрадь
Column C Column D Column E Column F Column G 111 555 12/12/2016 400 222 444 12/12/2015 500 333 666 12/12/2014 600
Если значения в каждом столбце в главном совпадении совпадают с значениями в ведомой книге, я хочу скопировать значение из столбца G из подчиненного устройства, в столбец v в моем хозяине.
В настоящий момент мой код работает, если я проверяю следующие критерии:
Master Slave Column G MATCHES Column C Column J MATCHES Column D
Однако, если я хочу проверить дату в столбце E моей основной рабочей книги, сопоставьте столбцу E в рабочую книгу моего подчиненного, мой код перестанет работать.
Вот мой код:
Option Explicit Option Compare Text Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim oCell As Range, oCell2 As Range, oCell3 As Range, oCell4 As Range, targetCell As Range Dim ws2 As Worksheet Dim lastRow As Long If Target.Column = 22 And ActiveCell.Value = "Expecting" Then If Not GetWb("Order Checker", ws2) Then Exit Sub lastRow = Range("J" & Rows.Count).End(xlUp).Row With ws2 For Each targetCell In Range("J6:J" & lastRow) Set oCell = .Range("D1", .Cells(.Rows.Count, "D").End(xlUp)).Find(what:=targetCell.Value, LookIn:=xlValues, lookat:=xlWhole) Set oCell2 = .Range("C1", .Cells(.Rows.Count, "C").End(xlUp)).Find(what:=targetCell.Offset(0, -3).Value, LookIn:=xlValues, lookat:=xlWhole) Set oCell3 = .Range("F1", .Cells(.Rows.Count, "F").End(xlUp)).Find(what:=targetCell.Offset(0, -5).Value, LookIn:=xlValues, lookat:=xlWhole) MsgBox oCell3 If Not oCell Is Nothing And Not oCell2 Is Nothing And Not oCell3 Is Nothing Then Application.EnableEvents = False targetCell.Offset(0, 12).Value = oCell.Offset(0, 3) Application.EnableEvents = True End If Next End With End If End Sub Function GetWb(wbNameLike As String, ws As Worksheet) As Boolean Dim wb As Workbook For Each wb In Workbooks If wb.Name Like "*" & wbNameLike & "*" Then '<-- check if workbook name contains "Depot Memo" Set ws = wb.Worksheets(2) Exit For End If Next GetWb = Not ws Is Nothing End Function
Проблема заключается в следующем:
Set oCell3 = .Range("E1", .Cells(.Rows.Count, "E").End(xlUp)).Find(what:=targetCell.Offset(0, -5).Value, LookIn:=xlValues, lookat:=xlWhole)
По какой-то причине oCell3 говорит: «Ничего».
Поэтому, когда я тестирую, если oCell3 не имеет ничего подобного:
If Not oCell3 Is Nothing Then
Это приводит к тому, что мой код не приводит к результату.
Может кто-нибудь, пожалуйста, покажите мне, что я делаю неправильно? благодаря
проблема может заключаться в том, что в датах ws2
самом деле значение String
а ws2
дата – настоящая Date
.
в этом случае вы можете использовать:
Set oCell3 = .Range("F1", .Cells(.Rows.Count, "F").End(xlUp)).Find(what:=CStr(targetCell.Offset(0, -5)), LookIn:=xlValues, lookat:=xlWhole)