Функция соответствия индекса VBA - PullRequest
0 голосов
/ 24 марта 2020

Я новичок в vba и совершенно потерял в написании вышеупомянутой функции в vba. На самом деле, я хочу сделать то же самое, что и обычную формулу Excel.

Обновление: Основываясь на ответе Скотта, я скорректировал свой код. Теперь у меня ошибка несоответствие типов . Тип Mname по определению является строкой. Значения в диапазоне поиска (B18: B38) являются (не исключающими) целыми числами. Должен ли я сказать Excel, чтобы принять их как строку? Если да, то как?

Сводка: У меня есть диапазон (D18: D38), в котором я хочу выбрать значение на основе номера строки, определенного совпадением между строкой Variable ( Mname) и другой диапазон (B18: B38). Строковая переменная определяется именем файла в папке.

Моя проблема заключается в том, что я получаю сообщение об ошибке: ' Невозможно получить свойство соответствия класса функции листа '

Спасибо за вашу помощь!

Sub Test()
Application.ScreenUpdating = False
    Dim Mname As String
    Set WSCockpit = ThisWorkbook.ActiveSheet

    Dim strFileName As String
    Dim strFolder As String: strFolder = WSCockpit.Range("D9").Value
    Dim strFileSpec As String: strFileSpec = strFolder & "*.xls*"
    strFileName = Dir(strFileSpec)
    Do While Len(strFileName) > 0

    Dim strFilePath As String: strFilePath = strFolder & strFileName

    Mname = Mid(strFileName, 13, Len(strFileName) - 17)

    Dim rw As Long
    rw = Application.Match(Mname, WSCockpit.Range("B18:B38"), 0)

    Dim VarImp As Boolean
    VarImp = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"), rw)

'some other task'

Loop

Application.DisplayAlerts = True
End Sub

Резервное копирование: Извините за грязный код. Я понятия не имею об общих правилах написания VBA. Как упоминалось ранее, моя цель - запустить поиск. Найденное значение будет «ИСТИНА» или «ЛОЖЬ». После этого я буду использовать это, чтобы определить, нужно ли импортировать найденный в папке файл или нет. Если у вас есть другие предложения относительно моего кодирования или задачи, которую я хочу выполнить, я был бы рад услышать.

1 Ответ

0 голосов
/ 24 марта 2020

Разбейте его на шаги, а также убедитесь, что данные, которые вы ожидаете найти в поиске, действительно есть. То есть, проверьте значение Mname во время выполнения (с помощью кода отладки) и убедитесь, что вы можете найти его вручную.

Наконец, вместо этого используйте Application.Match.

Dim rw as Long
rw = Application.Match(Mname, WSCockpit.Range("B18:B38"),0)

Dim import as Boolean
import = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"),rw)
...