Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-使用“导入”将多个文本文件导入同一工作簿~&引用;分隔值_Excel_Vba - Fatal编程技术网

Excel VBA-使用“导入”将多个文本文件导入同一工作簿~&引用;分隔值

Excel VBA-使用“导入”将多个文本文件导入同一工作簿~&引用;分隔值,excel,vba,Excel,Vba,我对VBA编码非常陌生,所以我可能完全错了。这是我在网上找到的一些代码,并为我的目的进行了修改 我需要将4个文本文件导入同一工作簿。 这些文本文件没有标题,因此我想将文本导入到具有标题的不同的预先存在的工作表中。 我的代码可以很好地导入文本和分隔特殊字符,但是它会打开到一个新的电子表格中,我只能执行一次 我需要一个对话框供用户选择文件,并在对话框中提示用户要导入哪个文件。 例如,第一个文件显示“选择上一个SVCORPNS文件”,第二个文件显示“选择上一个模型文件”,第三个文件显示“选择当前SVC

我对VBA编码非常陌生,所以我可能完全错了。这是我在网上找到的一些代码,并为我的目的进行了修改

我需要将4个文本文件导入同一工作簿。 这些文本文件没有标题,因此我想将文本导入到具有标题的不同的预先存在的工作表中。 我的代码可以很好地导入文本和分隔特殊字符,但是它会打开到一个新的电子表格中,我只能执行一次

我需要一个对话框供用户选择文件,并在对话框中提示用户要导入哪个文件。 例如,第一个文件显示“选择上一个SVCORPNS文件”,第二个文件显示“选择上一个模型文件”,第三个文件显示“选择当前SVCORPNS文件”,第四个文件显示“选择当前模型文件”。 分隔的值是~

我需要一种方法来循环选择4个文本文件。 我可以在以后添加标题,但无法导入到预先存在的工作表中

我尝试过宏录制和使用power query,这很好,但我不知道如何打开对话框更改代码,以便用户选择文件

Sub Macro11()
'
' Macro11 Macro
'
'Imports a text file
Dim vFileName

On Error GoTo ErrorHandle

 vFileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "select previous SVCORPNS file")

'If the user pressed "Cancel" or didn't select a text file, exit the procedure.
If vFileName = False Then
   GoTo BeforeExit
End If

'Switch off screen updating for speed.
Application.ScreenUpdating = False

'We now import the selected text file
Workbooks.OpenText Filename:=vFileName, _
    Origin:=xlMSDOS, StartRow:=2, DataType:=xlDelimited, TextQualifier:= _
    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _
    Comma:=False, Space:=False, Other:=True, OtherChar:="~~", _
    TrailingMinusNumbers:=False, Local:=True

'Just to show how we auto adjust the width of column A.
Columns("A:A").EntireColumn.AutoFit

BeforeExit:
Application.ScreenUpdating = True
Exit Sub
ErrorHandle:MsgBox Err.Description
Resume BeforeExit
'
End Sub
非常感谢您的帮助。

好的,这里有一个更“完整”的示例:

好的,这里有一个更“完整”的例子:


这个问题涵盖了你想做的事情-只需更改代码中的分隔符:因为答案不完整,所以它不涵盖它。这个问题涵盖了你想做的事情-只需更改代码中的分隔符:因为答案不完整,所以它不涵盖它
Sub Tester()

    Dim vFileName, wb As Workbook

    Set wb = ThisWorkbook 'for example

    'load a file
    vFileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
                                            "select previous SVCORPNS file")
    If Len(vFileName) > 0 Then
        PutDataFromTextFile wb.Sheets("SVCORPNS").Range("A2"), vFileName, "~"
    End If

    'load another file
    vFileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
                                            "select previous MODELS file")
    If Len(vFileName) > 0 Then
        PutDataFromTextFile wb.Sheets("MODELS").Range("A2"), vFileName, "~"
    End If


    'load more files to more places....

End Sub


'Read in a delimited file from "fPath", split each row on "delim", 
'      and put the content onto a sheet starting at "rngDest".
' ## Does not handle cases where a field value can contain the delimiter
'      such as for csv where there is "hello, world" as a quoted field value
Sub PutDataFromTextFile(rngDest As Range, fPath, delim As String)
    Dim i As Long, fnum As Integer
    Dim LineText As String, arr

    fnum = FreeFile
    i = 0
    Open fPath For Input As #fnum
    While Not EOF(fnum)
        Line Input #fnum, LineText
        arr = Split(CStr(LineText), delim)
        rngDest.Offset(i, 0).Resize(1, UBound(arr) + 1).Value = arr
        i = i + 1
    Wend
    Close #fnum
End Sub