2014-09-29 2 views
0

Итак, у меня есть книга с несколькими листами. Рабочие листы названы:Excel VBA Макросы: Найти/сопоставить ячейки с одного листа на столбец в другом

Входы Выходы Оборудование

Входные и выходные серийные идентификаторы совпадающая с actualy IP-адресов.
Вход 1: 192.168.0.1 вход 2: 192.168.0.2 ... и т.д.

Оборудование имеет 3 колонки. Первый имеет Устройства, второй столбец, который имеет входные серийные идентификаторы и третий из выходных последовательных идентификаторов.

Тостер: Вход 1: Выход 3 Блендер: вход 2: Выход 2 ... и т.д.

Теперь, как обычно, я буду использовать ВПР (A1, входы A: B, 2) и Vlookup (A1, Outputs! A: B, 2), но я должен включить это в макрос VBA, который у нас есть, и я понятия не имею, как это сделать.

Sub TrackHardware() 

'~~~~~~~~~~~~~~~~~~~~~ 
'Activating Device 
'~~~~~~~~~~~~~~~~~~~~~ 
currentOutputRow = 2 
Dim test As String 


For currentRow = 2 To 32768 'The last row of your data 
'For Loop to go through contents of Hardware individually 

    If Not (IsEmpty(Worksheets("Hardware").Range("A" & currentRow).Value)) Then 
     'To Skip the empty cells 

      HWID=Worksheets("Hardware").Range("a" & currentvalue).Value 
      'HWID is the search term coming from Sheet:'Hardware' 

      Desc=Worksheets("Hardware").Range("D" & currentvalue).Value 
      'Desc is the Plain Text description coming from Sheet:'Hardware' 



      inputrow={Match pseudocode that didn't work(HWID, "Inputs", Range:= "A:B", 2) } 
      outputrow={Match pseudocode that didn't work(HWID, "Outputs", Range:= "A:B", 2) } 
      'trying to find the row # of search term in Sheets 'Input' and 'Output' 

      Worksheets("Inputs").Range("C" & inputrow).Value = Desc 
      Worksheets("Outputs").Range("C" & outputrow).Value = Desc 
      'Pastes The Device Description to Input and Output Sheets 



    End If 
Next currentRow 
'And on to the next line in 'Hardware' 

End Sub 

Я хотел бы также, чтобы учесть ошибки, как 2-х устройств на одной и той же ввода/вывода или пустые ячейки, но я думаю, что я могу понять тех, кто сам. Эта функция поиска - это то, что действительно дает мне много неприятностей.

ответ

0

Во-первых, возникла проблема, если вы не можете позвонить по функции Application.Match. Я не уверен, почему это будет отсутствовать, но я знаю, что есть некоторые «ограниченные» версии Office/Excel, которые не имеют полной функциональности VBA. Я не уверен, что так происходит с вашей установкой.

Теперь к вашей проблеме, хотя ...

Чтобы использовать функцию Application.Match:

Match функция принимает одну строку или вход одного диапазона столбца. Вы пытаетесь пройти в диапазоне "A:B", что всегда вызывает ошибку. Вместо этого измените на один ряд строк/столбцов.

Кроме того, 2 не является вариантом для третьего аргумента, который может быть равен -1 (меньше), 0 или False (точнее) или 1 (больше). Я не уверен, что это само по себе вызовет ошибку, но вы все равно должны ее исправить.

inputRow = Application.Match(HWID, Worksheets("Inputs").Range("A:A"), False) 

Если точное совпадение не может быть найден, он выдаст ошибку, которую вы можете поймать так:

inputRow = Application.Match(HWID, Worksheets("Inputs").Range("A:A"), False) 
If IsError(inputRow) Then 
    'Do something like: 
    MsgBox HWID & " not found!", vbInformation 
    Exit Sub 
End If 

ПРИМЕЧАНИЕ Если вы на самом деле нужно, чтобы проверить как столбцов, то вы можете либо удвоить функцию Match, либо использовать диапазон .Find.

Dim foundRange as Range 
Set foundRange = Range("A:B").Find(HWID) 
If Not foundRange Is Nothing Then 
    inputRow = foundRange.Row 
Else 
    MsgBox HWID & " not found!", vbInformation 
End If 

Обработка ошибок с захватом WorksheetFunction.Match

Ошибка для Application.WorksheetFunction.Match должно быть что-то вроде:

inputRow = Empty 
On Error Resume Next 
inputRow = Application.WorksheetFunction.Match(HWID, Worksheets("Inputs").Range("A:A"), False) 
If Err.Number <> 0 Then 
    MsgBox "Match not found", vbInformation 
    Exit Sub 
End If 
On Error GoTo 0 
+0

Так что я попытался "inputrow = Application.Match (###)" и выдает ошибку 1004. Затем я напечатал «Application.Ma» и щелкнул правой кнопкой мыши на «Свойства списка/Методы», и Match там не работает. Ввод M-A-T привел к «MathCoProcessor» ... Я запускаю Visual Basic 7.1, а Excel - Excel Excel 2013, если это помогает. – Jongscx

+0

Ничего, я нашел! Правильное использование: «Application.WorksheetFunctions.Match (HWID, Worksheets (« Входы »). Диапазон (« A: B »),« 2 »)« – Jongscx

+0

Вы можете попробовать «Application.Worksheetfunction.Match (###)», но это потребует немного отличная ошибка, поскольку эта функция будет вызывать ошибки, а не возвращать значение ошибки. Попробуйте это и дайте мне знать, как это происходит. Я сейчас нахожусь на своем телефоне, но я могу обновить свой ответ с помощью обработки ошибок, когда я вхожу в офис позже. –

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