2017-02-21 53 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關於通過文件騎自行車並讓它們自動導入的評論是下一步,代碼中非常明顯的理想特徵,但現在對我來說似乎很多。我已經爲每塊主板節省了一個小時,這真是太棒了。再次感謝你們。