2017-02-21 90 views
0

我知道这篇文章看起来与其他许多职位似乎非常相似。我已经学习了C++和C#,他们都只做足够小的工作,并且我不能很好地理解VBA以使这个宏发生。从文本文件导入数据到主文件(改变目标目录) - Excel

我刚刚下了100个需要导入到主文件的文件。我无法修改源文件,但主文件只需要选择列。

这个宏的工作几乎完美我只需要能够为每个正在使用的宏实例选择新的文件路径。我发现,似乎用这样的事情很多职位:

https://social.msdn.microsoft.com/Forums/office/en-US/231cbfc5-95ad-4673-a20c-f87355c6bc5e/prompt-user-for-file-name-to-import-as-fixed-width-text-file?forum=exceldev

以先制作一个文件路径到一个变量,然后将它传递给ActiveSheet.QueryTables.Add命令。我可能只是错过了一些东西,但是我所不了解的所有例子之间有很多变数。看起来vba的msdn页面比用于C#的msdn页面更不直观。无论是我还是我根本无法理解他们没有采取我需要的补救措施。

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

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 

我将不胜感激任何和所有可能的帮助。无论如何,非常感谢你的时间。

+0

你引用的例子看起来很简单。如果还没有,还应阅读[Application.GetOpenFilename方法](https://msdn.microsoft.com/en-us/library/office/ff834966.aspx)上的MSDN文章。把它作为一个单独的宏写下来,然后摆弄它,看看它是如何工作的。你遇到了什么具体问题。 –

+0

代码引用轮胎,当我使用它时选择一个打开的表格。我并不真的需要这个,因为我写的代码只是在一个目标上打开一个文件。我只需要做到这一点,目标是由用户选择而不是硬编码。我遇到的问题是,他用来将目标重定向到一个选定的“FileName”的变量被写入很多代码部分,以至于我无法确定如何才能让出我需要的东西。我刚刚尝试了大约一小时,并且昨晚大部分时间。 – hotmaildotcom1

+0

这个问题解决了吗?请注意:你可以回答你自己的问题。另外,你是否真的想为每个刚好不到100个文件的对话框弹出文件选择器?考虑循环一个目录,用户只需选择一次文件夹选择器。 – Parfait

回答

0

所以立即发布后,我没有想出它的评论,我尝试了一些东西,并得到它的工作。这里是代码。

子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 +Ť,我已经hotkeyed到命令恢复到制作表格。我无法弄清楚它来自哪里!感谢您的帮助。这为我节省了大量的时间。

虽然Parfait关于通过文件骑自行车并让它们自动导入的评论是下一步,代码中非常明显的理想特征,但现在对我来说似乎很多。我已经为每块主板节省了一个小时,这真是太棒了。再次感谢你们。