将多个文件.blst(看起来像.csv)导入excel

问题描述 投票:1回答:1

我想将多个文件.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 & Chr(iRemainder + 64)
   End If
   Debug.Print ConvertToLetter & 1
End Function

下面的代码是导入向导功能

Function import_wizard(xFileName, xAddress) As String

   With ActiveSheet.QueryTables.Add("TEXT;" & 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 & xFileName(i) & vbCrLf
            countFile = i + 23

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

        'Debug.Print "X = " & xAddress
        Next i

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

ExitHandler:
ErrHandler:
End Sub

当我厌倦评论' Call import_wizard(xFileName, xAddress)代码可以选择多个文件,并可以在UI上显示,但厌倦删除评论Call import_wizard(xFileName, xAddress)可以选择多个文件,但它只显示选择的最后一个文件,而不是打开它们的文件。我不确定它不会做ActiveSheet.QueryTables.Add("TEXT;" & xFileName, Range(xAddress))。有人可以建议吗?谢谢

excel vba
1个回答
0
投票

您需要“(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;" & xFileName, ActiveSheet.Cells(1, NextColumn))
       ...
© www.soinside.com 2019 - 2024. All rights reserved.