Может быть, я упускаю из виду очевидное, но я не могу понять, как работать с одним результатом в массиве.
Я использую Ken Getz ahtCommonFileOpenSave API в VBA для включите выбор нескольких файлов, используя следующий код:
Private Sub btn_openfiles_Click()
Dim strFilter As String
Dim strInputFileName As String
Dim strFiles() As String
Dim a As Long
strFilter = ahtAddFilterItem(strFilter, "Images (*.PNG)", "*.PNG")
strFiles = ahtCommonFileOpenSave( _
Filter:=strFilter, _
OpenFile:=True, _
InitialDir:="T:\DTP\Programs\Default\", _
DialogTitle:="Please select an input file...", _
Flags:=ahtOFN_EXPLORER + ahtOFN_ALLOWMULTISELECT)
If IsArray(strFiles) Then
For a = 0 To UBound(strFiles)
Me.test_filenames = Me.test_filenames & strFiles(a) & vbCrLf
Next a
Else
Me.test_filenames = strFiles
End If
End Sub
Я знаю, что результатом является массив, потому что я устанавливаю флаг ahtOFN_ALLOWMULTISELECT. Когда выбрано несколько файлов, все идет хорошо. Но если выбран только один файл, выдается ошибка
13 (несоответствие типов в strFiles)
, поскольку возвращаемое значение ahtCommonFileOpenSave не является массивом. Я могу использовать тип Array, просто добавив фиктивное значение в массив, созданный ahtCommonFileOpenSave, и игнорируя это при обработке имен файлов в форме, но, возможно, есть лучшее решение. У кого-нибудь есть предложение?