Как передать вариант dim в строку при конкатенации? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь экспортировать файл с заданным c именем (где разные части имени являются переменными). Пока что первые две строки не вызывают проблем. Проблема возникает, когда я выполняю функцию сопоставления индекса и получаю значение типа данных варианта. Я не могу преобразовать тип варианта в строку, чтобы использовать его позже в коде. Фрагмент ниже:

Sub Export_Imgs()

    Dim tempSht as Range
    Dim dataSht as Range
    Dim matCell as Range
    Dim jobNum as Range
    Dim buildDate As String
    Dim buildID As String
    Dim imgFile As String
    Dim matID As Variant
    Dim imgMap As String
    Dim imgPDF As String
    Dim imgJPG As String

    Set tempSht = ThisWorkbook.Sheets("Template")
    Set dataSht = ThisWorkbook.Sheets("Machines & Material")
    Set matCell = tempSht.Range("$E$81")
    Set jobNum = tempSht.Range("$E$12")

    'Define file name variables
    buildDate = Format(Date, "YYYY-MM-DD")
    buildID = Left(jobNum, InStr(jobNum, ".") - 1)
    matID = WorksheetFunction.Index((dataSht.ListObjects("AMmat").ListColumns(4).DataBodyRange), _
        WorksheetFunction.Match(matCell, dataSht.ListObjects("AMmat").ListColumns(1).DataBodyRange, 0))

        imgMap = "C:\Users\Example\Desktop\"
        imgJPG = buildDate & "_" & buildID & "_" & CStr(matID) & ".jpg"
        imgFile = imgMap & imgJPG

End Sub

Я получаю сообщение об ошибке «несоответствие типов» в строке imgJPG в нижней части кода. Я чувствую, что упускаю что-то очень простое. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 мая 2020

Я бы не использовал здесь Index, а вместо этого использовал бы следующий подход:

With dataSht.ListObjects("AMmat")
    Dim rw
    rw = Application.Match(matCell.Value, .ListColumns(1).DataBodyRange, 0)

    If Not IsError(rw) Then
        matId = .ListColumns(4).DataBodyRange.Cells(rw).Value
    End If   
End With
...