Получить acSpreadSheetType для acLink - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь связать внешнюю таблицу с Access с помощью команды DoCmd.TransferSpreadsheet.

Мой код:

DoCmd.TransferSpreadsheet acLink, import_type, TableName, internal_filepath, True

Проблема с этим кодом заключается в том, что я получаю противоречивые ошибки относительно типа файла (Ошибка 3274).Я не могу воспроизвести ошибку.

Значение import_type основано на функции, получающей (из этот поток ) версию файла Excel:

Function excel_type(File As String) As Integer
    Dim ext As String
    ext = LCase(extension(File))
    excel_type = IIf(ext = "xlsx", acSpreadsheetTypeExcel12, _
                 IIf(ext = "xls", acSpreadsheetTypeExcel9, _
                 IIf(ext = "xml", acSpreadsheetTypeExcel12Xml, -1)))
End Function

Public Function extension(File As String) As String
    extension = Right(File, Len(File) - InStrRev(File, "."))
End Function

Он вернул "9" для .xlsx, что правильно, но я все еще время от времени получаю эту ошибку.

Что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Вместо использования последовательных операторов iif я мог бы предложить использовать один оператор select case, например:

Function ExcelType(strFnm As String) As Long
    Select Case LCase(Right(strFnm, Len(strFnm) - InStrRev(strFnm, ".")))
        Case "xlsx", "xml"
            ExcelType = acSpreadsheetTypeExcel12Xml
        Case "xls"
            ExcelType = acSpreadsheetTypeExcel9
        Case Else
            ExcelType = -1
    End Select
End Function
0 голосов
/ 14 мая 2019

Попробуйте это:

excel_type = IIf(ext = "xlsx", acSpreadsheetTypeExcel12Xml, _
             IIf(ext = "xls", acSpreadsheetTypeExcel9, _
             IIf(ext = "xlsb", acSpreadsheetTypeExcel12Xml, -1)))

Документация здесь

...