Vba 将数据从文本文件导入主文件(更改目标目录)-Excel

Vba 将数据从文本文件导入主文件(更改目标目录)-Excel,vba,excel,targeting,Vba,Excel,Targeting,我知道这篇文章对那些理解它的人来说会和其他很多文章非常相似。我已经学习了C++和C,它们都很好地完成了一些小的工作,我不能很好的理解VBA来实现这个宏。p> 我有将近100个文件需要导入到主文件。我无法修改源文件,但主文件只需要选择列 这个宏几乎可以完美地工作,我只需要能够为正在使用的宏的每个实例选择新的文件路径。我发现许多帖子似乎使用了这样的内容: 以便首先将文件路径设置为变量,然后将其传递给ActiveSheet.QueryTables.Add命令。我可能只是遗漏了一些东西,但是在所有的例子

我知道这篇文章对那些理解它的人来说会和其他很多文章非常相似。我已经学习了C++和C,它们都很好地完成了一些小的工作,我不能很好的理解VBA来实现这个宏。p> 我有将近100个文件需要导入到主文件。我无法修改源文件,但主文件只需要选择列

这个宏几乎可以完美地工作,我只需要能够为正在使用的宏的每个实例选择新的文件路径。我发现许多帖子似乎使用了这样的内容:

以便首先将文件路径设置为变量,然后将其传递给ActiveSheet.QueryTables.Add命令。我可能只是遗漏了一些东西,但是在所有的例子之间有很多我不理解的变量。vba的msdn页面似乎比C的页面直观得多。要么如此,要么我根本无法理解他们没有采取我需要的babysteps

我使用宏工具编写了下面大部分代码。大约一个小时的工作使我能够用活动单元替换硬编码单元

Sub InputDataFromTextFile()
'
' InputDataFromTextFile Macro
'
' Keyboard Shortcut: Ctrl+t
'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;E:\Dropbox\College 2016-2017\Research\Buffered Solutions\pH10\With PDADMAC\30.CSV" _
        , Destination:=ActiveCell)
        .Name = "30"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(9, 1, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

我将非常感谢能提供的任何和所有帮助。无论如何,非常感谢大家抽出时间

因此,在发布之后,我在评论中没有找到答案,我尝试了一些方法,并使其发挥作用。这是目前的代码

子InputDataFromTextFile

Dim Filt As String
    Dim FilterIndex As Integer
    Dim Title As String
    Dim FileName As Variant

' Set up list of file filters
    Filt = "All Files (*.*),*.*"

' Display Text Files by default
    FilterIndex = 1

' Set the dialog box caption
    Title = "Select a File to Import"

' Get the file name
    FileName = Application.GetOpenFilename _
        (FileFilter:=Filt, _
        FilterIndex:=FilterIndex, _
        Title:=Title)

' Exit if dialog box is canceled
    If FileName = False Then
        MsgBox "No file was selected."
        Exit Sub
    End If

'
' InputDataFromTextFile Macro
'
' Keyboard Shortcut: Ctrl+t
'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & FileName, _
        Destination:=ActiveCell)
        .Name = "30"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1252
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(9, 1, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
老实说,我最大的问题之一是,一旦重新启动excel,我热键输入的Ctrl+T命令就会恢复为生成表格。我不知道它是从哪里来的!谢谢你的帮助。这节省了我很多时间


虽然Parfait关于循环文件并让它们自动导入的评论是下一步,也是代码中非常明显需要的特性,但现在对我来说似乎很多。我已经为每张母版节省了一个多小时,这真是太棒了。再次非常感谢大家

你举的例子似乎很简单。如果您没有,还应该阅读上的MSDN文章。将其作为一个单独的宏编写,并对其进行处理,以了解其工作原理。您在使用它时遇到了什么具体的问题。代码引用了我在使用它时选择一个打开的表。我真的不需要它,因为我的代码是由macromaker编写的,只是在目标位置打开一个文件。我只需要让目标由用户选择,而不是硬编码。我遇到的问题是,他用来将目标重新定向到选定的文件名的变量被写入了太多的代码段,以至于我无法确定如何只获取我需要的内容。我刚才又试了一个小时,昨天晚上大部分时间都在试。这个问题解决了吗?注意:你可以回答你自己的问题。另外,您真的想为100个文件中的每一个文件创建一个对话框弹出式文件选择器吗?考虑循环使用一个目录,用户只选择一次文件夹选择器。我应该继续写这篇文章还是转到另一篇?