2016-01-18 6 views
1

я получаю запустить ошибка времени 13 при выполнении следующих кодавремя выполнения 13 Тип Несоответствие

Dim sh, shmem As Worksheet 
Dim rw As Range 
Set shmem = Sheets("SHEET1") 
Set sh = Sheets("SHEET2") 
For Each rw In sh.Rows 
    If sh.Cells(rw.Row, 1).Value = "" And sh.Cells(rw.Row, 2).Value = "" Then 
     Exit For 
    End If 

    With Application.WorksheetFunction 
     Dim bdaytest As Variant 
     Dim match1 As Double 

     bdaytest = .Index((shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)) * (shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)), 0) 
     'match1 = .Match(1, .Index((shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)) * (shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)), 0), 0) 
     bdaytest = .Index(1, shmem.Range("D2:D121"), match1) 
    End With 
Next rw 

Ошибка Случается в следующую строку, которую я извлеченный из 2 линии (закомментирована сейчас)

bdaytest = .Index((shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)) * (shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)), 0) 
'match1 = .Match(1, .Index((shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)) * (shmem.Range("A2:A121") = sh.Cells(rw.Row, 1)), 0), 0) 

I что ошибка должна произойти, потому что bdaytest - неправильный тип данных, но я не уверен, и до сих пор я не мог найти никакого решения. Спасибо заранее за любые предложения.

Редактировать: я хочу узнать номер строки строки, где 2 столбца (A & B) имеют запрашиваемое значение. Запрашиваемая стоимость находится в sh.Cells(rw.Row, 1) и sh.Cells(rw.Row, 2)

+0

Опишите проблему, которую вы пытаетесь решить. –

+0

надеюсь, что мое редактирование помогает @EricK. – guest

+0

вы хотите, чтобы весь номер строки для записи соответствовал A & B? или только 1 номер строки, который соответствует? –

ответ

4

Вы не можете создавать массивы, используя = и * подобное в VBA, в отличие от формулы. Что вы можете сделать, это использовать Application.Countifs так:

Dim sh As Worksheet 
Dim shmem    As Worksheet 
Dim rw     As Range 

Set shmem = Sheets("SHEET1") 
Set sh = Sheets("SHEET2") 

For Each rw In sh.Rows 
    If sh.Cells(rw.Row, 1).Value = "" And sh.Cells(rw.Row, 2).Value = "" Then 
     Exit For 
    End If 

    With Application 
     Dim bdaytest  As Variant 
     Dim match1  As Double 

     bdaytest = .Match(1, .CountIfs(sh.Cells(rw.Row, 1), shmem.Range("A2:A121"), _ 
             sh.Cells(rw.Row, 2), shmem.Range("B2:B121")), 0) 
     If Not IsError(bdaytest) Then bdaytest = shmem.Range("D2:D121").Cells(bdaytest) 
    End With 
Next rw 

Примечание: WorksheetFunction.Countifs не будет работать.

+0

Спасибо @Rory! Я попробовал варианты WorksheetFunction.Countifs ранее. Несомненно, конечно, но с применением он отлично работает! – guest

Смежные вопросы