Импортировать несколько файлов .blst (похожих на .csv) в Excel

#excel #vba

#excel #vba

Вопрос:

Я хочу импортировать несколько файлов .blst на один рабочий лист и хочу разместить файлы .blst горизонтально на рабочем листе. Какой файл будет помещен отдельно примерно в 23 столбца, например, первое место файла в столбце A1 — W1, а второе X1- AT1 продолжить …n файл. Но мой код не может их открыть.

Приведенный ниже код представляет собой функцию преобразования в букву

 Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha   64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter amp; Chr(iRemainder   64)
   End If
   Debug.Print ConvertToLetter amp; 1
End Function

  

Приведенный ниже код является функцией мастера импорта

 Function import_wizard(xFileName, xAddress) As String

   With ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, Range(xAddress))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 936
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileOtherDelimiter = ";"
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With


End Function
  

Приведенный ниже код является кнопкой для просмотра и импорта нескольких файлов .blst

 Private Sub browseXML_Click()

    Dim xFileName As Variant
    Dim xAddress As String
    Dim countFile As Integer


    On Error GoTo ErrHandler

    xFileName = Application.GetOpenFilename(FileFilter:="blst Files,*.*", Title:="Select file", MultiSelect:=True)

    If IsArray(xFileName) Then
            'Msg = vbNewLine
        For i = LBound(xFileName) To UBound(xFileName)
            Msg = Msg amp; xFileName(i) amp; vbCrLf
            countFile = i   23

            xAddress = ConvertToLetter(countFile) amp; "1"
            SplitterMark.TextBox1.Value = Msg
            Call import_wizard(xFileName, xAddress)

        'Debug.Print "X = " amp; xAddress
        Next i

    Else
        MsgBox "No files were selected."
        GoTo ExitHandler
    End If

ExitHandler:
ErrHandler:
End Sub
  

Когда я устаю комментировать, ' Call import_wizard(xFileName, xAddress) код может выбрать несколько файлов и может отображаться в пользовательском интерфейсе, но устал удалять комментарии Call import_wizard(xFileName, xAddress) , могу выбрать несколько файлов, но он показывает только последний файл из select, а не открывает их файл. Я не уверен, что это не подходит ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, Range(xAddress)) или нет. Кто-нибудь, пожалуйста, может предложить? Спасибо

Ответ №1:

Вам нужно «(i)», чтобы выбрать каждый отдельный файл в этой строке кода:

 Call import_wizard(xFileName(i), ...
  

Вам не нужна ваша функция «ConvertToLetter» для преобразования номера столбца в адрес.
Я предлагаю рассчитать следующий столбец импорта следующим образом:

 ...
Dim NextColumn As Long
For i = LBound(xFileName) To UBound(xFileName)
    NextColumn = (i - 1) * 23   1
    Call import_wizard(xFileName(i), NextColumn)
Next i
...
  

Затем ваша процедура импорта должна начинаться следующим образом:

 Function import_wizard(ByVal xFileName as String, NextColumn as Long) As String
   With ActiveSheet.QueryTables.Add("TEXT;" amp; xFileName, ActiveSheet.Cells(1, NextColumn))
       ...
  

Комментарии:

1. Спасибо за ваш ответ. Я устал исправлять то, что вы предлагаете. но в Call import_wizard(xFileName(i), NextColumn) нем отображается какая-то ошибка о ByRef argument type mismatch том, как я это делаю?

2. О, я понял. Большое вам спасибо